Archivo del Autor: admin

Humanos contra máquinas, ¿oportunidad o amenaza?

Es muy sugerente dejarse llevar por lo que nos muestran las películas de ciencia ficción, interiorizando esa sensación, de que tarde o temprano las máquinas se revelarán contra sus creadores. Bastan unas cuantas sesiones de cine, y vemos como muchas películas basan sus argumentos en enfrentamientos entre humanos y máquinas.

Input: humans fighting with robots. danger scene. shaded lighting Michael Garmash. agfa photography synth vibe, vaporwave colors, lens flare, moody lighting, moody vibe,blurry background, grain, tranquil, calm, faded

Los humanos y las máquinas son dos tipos diferentes de seres, cada uno con sus propias habilidades y limitaciones. Los humanos somos seres vivos con capacidades como el pensamiento consciente, la emoción y el libre albedrío, mientras que las máquinas son creadas por el ser humano y se basan en la lógica y la programación para realizar tareas específicas. Aunque las máquinas pueden ser muy útiles y eficientes en ciertas áreas, todavía hay muchas cosas que solo los seres humanos somos capaces de hacer. Por lo tanto, no se puede decir que exista una competencia real entre los humanos y las máquinas, sino que más bien deberíamos verlas como herramientas que nos ayudan a hacer nuestro trabajo de manera más eficiente.

La inteligencia de las máquinas es un tema altamente debatido en el campo de la ciencia de la computación y la inteligencia artificial. No existe una única forma de medir la inteligencia de las máquinas, ya que esta puede manifestarse de muchas maneras diferentes y dependerá del contexto en el que se utilice la máquina. Una forma común de medir la inteligencia de las máquinas es a través del uso de tests de inteligencia artificial, que pueden evaluar su capacidad para resolver problemas, razonar, planificar, aprender y ejecutar tareas de manera autónoma. Sin embargo, estos tests tienen sus propias limitaciones y no pueden medir todos los aspectos de la inteligencia de las máquinas. En general, la forma en que se mide la inteligencia de las máquinas seguirá siendo un tema de debate en el futuro.

¿Cómo podríamos evaluar el nivel de inteligencia de las diferentes inteligencias artificiales que van apareciendo? El famoso Test de Turing fue creado como una prueba para evaluar la capacidad de una IA para hacerse pasar por un humano, utilizando como única interfaz una conversación por chat. No estamos hablando necesariamente de que la máquina sea inteligente, sino que simplemente es capaz de simular el comportamiento humano.

Por lo tanto el Test de Turing no nos vale para medir el nivel de inteligencia de las máquinas. Para poder abordar esta cuestión, tenemos que ver antes, que es la inteligencia y como la medimos en las personas.

¿Qué es la inteligencia?

Veamos algunas definiciones:

  • La inteligencia es la habilidad para adquirir conocimientos, pensar y razonar con eficacia, y manejarse en el entorno de modo adaptativo.
  • La inteligencia es la capacidad de entender, asimilar, elaborar información y utilizarla para resolver problemas y parece estar ligada a funciones mentales como percepción y memoria.

Poco nos aportan estas definiciones para medir la inteligencia. Por otro lado, ya no se habla de inteligencia como de una propiedad única, sino que hay muchos tipos de inteligencia. Howard Gardner, estudioso y profesor de la Universidad de Harvard que se dedicó a investigar las capacidades cognitivas del ser humano, presentó la teoría de las inteligencias múltiples en 1983:

  • Inteligencia lingüístico-verbal: habilidad para dominar el lenguaje.
  • Inteligencia lógico-matemática: habilidad para razonar de forma deductiva y lógica y la capacidad de resolver problemas matemáticos.
  • Inteligencia espacial-visual: capacidad para observar el mundo y los objetos desde distintas perspectivas para resolver problemas.
  • Inteligencia musical-auditiva: capacidad para componer o interpretar piezas musicales.
  • Inteligencia corporal-kinestésica: la habilidad para utilizar el propio cuerpo pudiendo para expresar o para moverse.
  • Inteligencia Intrapersonal: capacidad para entenderse a sí mismos.
  • Inteligencia interpersonal: capacidad para relacionarse y llevarse bien con otras personas.
  • Inteligencia naturalista: capacidad para clasificar y comprender elementos del medio natural (objetos, animales y plantas) para sobrevivir.
  • Inteligencia emocional: comprende tanto a la inteligencia intrapersonal como la interpersonal. Autoconciencia, autocontrol, automotivación, empatía y habilidades sociales.
  • Inteligencia colaborativa: capacidad para escoger la mejor opción para alcanzar una meta, trabajando en equipo.
  • Inteligencia creativa: capacidad para innovar y abordar situaciones de múltiples formas, con flexibilidad, produciendo soluciones originales.
  • Inteligencia existencial filosófica: capacidad para reflexionar sobre la propia existencia.

¿Cómo de inteligentes son las máquinas?

Las máquinas pueden ser muy inteligentes en ciertos aspectos, pero todavía tienen muchas limitaciones en comparación con los seres humanos. Las máquinas se basan en la lógica y la programación para realizar tareas específicas, lo que las hace muy eficientes y precisas en ciertas áreas. Sin embargo, las máquinas carecen de la capacidad de pensamiento consciente, la emoción y el libre albedrío que caracterizan a los seres humanos, lo que limita su capacidad para resolver problemas de manera creativa y adaptarse a situaciones cambiantes. En general, se puede decir que las máquinas son muy inteligentes en ciertos aspectos, pero todavía tienen mucho camino por recorrer en comparación con la inteligencia humana.

¿Y si medimos el desempeño de las máquinas en cada una de las facetas de la inteligencia descritas para las personas? De forma específica, las máquinas ya manifiestan aptitudes sorprendentes en muchas de las dimensiones de la inteligencia. Para responder a la pregunta de cómo de inteligentes son las máquinas vamos a analizar cada una de estas dimensiones.

Tipos de inteligencia en las que las máquinas empiezan a ser competentes

Tipos de inteligencia desarrollada por las máquinas

Las máquinas pueden desarrollar diferentes tipos de inteligencia, dependiendo del contexto en el que se utilicen y de la forma en que estén programadas. Algunos de los tipos de inteligencia que las máquinas pueden desarrollar incluyen:

Inteligencia colaborativa

Los cobots son robots diseñados para trabajar de manera colaborativa con los seres humanos en lugar de reemplazarlos. Los cobots suelen ser diseñados para ser más pequeños y menos potentes que los robots industriales tradicionales, y suelen tener sistemas de seguridad incorporados para evitar lesiones a las personas que trabajan junto a ellos. Los cobots se utilizan en una variedad de aplicaciones, como la manipulación de objetos pequeños en la industria de la electrónica, el empaquetado de alimentos y la fabricación en general. Los cobots pueden ayudar a los seres humanos a aumentar su eficiencia y a realizar tareas que son difíciles o peligrosas para ellos, como trabajar en entornos poco amigables o repetitivos.

Inteligencia creativa

La creatividad se refiere a la capacidad de producir ideas o trabajos originales y valiosos, y es una cualidad muy difícil de medir y reproducir en una máquina. Sin embargo, hay algunos ejemplos de máquinas que han demostrado cierta capacidad para la creatividad, como DALL-E 2 o Stable Diffusion.

Podemos usar estas herramientas para acelerar el proceso creativo, creando contenidos para ilustrar libros, comics o poemas, imágenes originales para acompañar cualquier tipo de presentación o para la creación literaria.

Inteligencia lingüística

En este campo, al igual que en la generación de imágenes sintéticas está habiendo una gran revolución impulsada por los grandes modelos de Inteligencia Artificial. Merece especial atención el nuevo modelo de GPT-3 entrenado especialmente para la conversación. Es impresionante y lo puedes probar aquí.

Adicionalmente a la generación de texto, encontramos herramientas como Whisper que nos permiten implementar soluciones de reconocimiento de voz. Whisper es un sistema de reconocimiento automático de voz (ASR) entrenado en 680.000 horas de datos supervisados multilingües y multitarea recopilados de la web. El uso de un conjunto de datos tan grande ofrece un mejor comportamiento con los acentos, el ruido de fondo y el lenguaje técnico. Además, permite la transcripción simultánea en varios idiomas, así como la traducción de esos idiomas al inglés.

Inteligencia lógico-matemática

Problemas clásicos de primaria son fácilmente resolubles por una máquina.

Problema de 4º de Primaria resuelto por una máquina
Problema de 4º de Primaria resuelto por una máquina
Problema de 4º de Primaria resuelto por una máquina

Aumentamos un poco el nivel, y probamos con problemas de 6º de Primaria. Vemos que aun siendo un problema sencillo, la máquina no consigue expresar un resultado. En cualquier caso es interesante como desarrolla una respuesta indicando lo que necesita obtener para calcular la respuesta correcta.

Problema de 4º de Primaria NO resuelto por una máquina

Probamos con el mismo problema con el otro modelo de IA. En este caso, el sistema nos dará una respuesta siempre, aunque esta no sea correcta. Esto nos lleva a plantearnos la siguiente cuestión. ¿Qué ocurre con verificación de los resultados que empezará a ofrecer la IA con cada vez más frecuencia? ¿Quién verificará que las respuestas son correctas? ¿Qué ocurrirá con la confianza en la idoneidad de las respuestas o de los contenidos generados automáticamente cuando estos sean indistinguibles de los contenido generados por una persona?

Problema de 4º de Primaria NO resuelto por una máquina

En este último ejemplo vemos que la máquina se está equivocando de nuevo al no entender que tiene que hacer algunos cálculos intermedios.

Problema de 6º de Primaria NO resuelto por una máquina

Pero si le planteamos el problema al nuevo modelo de Chat GPT-3, fijaros lo que es capaz de hacer. Le ha costado unos 3 segundos resolver un problema matemático de los que se plantean en nuestras escuelas a niños de 10 años y lo hace además argumentando perfectamente los pasos que ha dado para resolverlo.

Problema de 6º de Primaria RESUELTO por una máquina, ¡¡¡y de qué manera!!!

Inteligencia espacial

La inteligencia espacial es una forma de inteligencia que se refiere a la habilidad de percibir, imaginar y manipular objetos en espacio. Las personas con alta inteligencia espacial tienen una buena capacidad para comprender y representar objetos en tres dimensiones, lo que les permite, por ejemplo, resolver problemas de geometría y navegar en espacios complejos. La inteligencia espacial también es importante en actividades como la lectura de mapas, el diseño de edificios y la conducción de vehículos.

En este campo, a las máquinas les queda mucho terreno por recorrer, pero si nos fijamos en lo que están consiguiendo ya en espectáculos de drones con luces, creando escenas impresionantes, está claro que en pocos años, también en esta dimensión de la inteligencia nos superarán ampliamente.

Inteligencia musical

Hace algunos años empezaron a surgir ejemplos de composiciones musicales creadas de forma artificial. En el siguiente video podemos ver un ejemplo de video musical creado siguiendo el estilo de los Beatles:

Canción creada por una IA

Hoy día encontramos servicios como AIVA, que nos ofrecen la posibilidad de crear música de forma muy sencilla.

Canción generada por una IA

En la creación artística, las máquinas han conseguido aprender el sentido de la estética y los patrones que asociamos con la belleza y con la harmonía. Pero cuando se trata de emocionar o de transmitir algún sentimiento, todavía no alcanzan los resultados que hemos conseguido los humanos. La capacidad de poner la piel de gallina o de emocionar hasta conseguir hacer saltar las lágrimas es algo que todavía no está al alcance de las máquinas. ¿Cuándo crees que veremos el primer éxito musical creado totalmente de forma artificial? Yo creo que no falta tanto y que en pocos años lo veremos hecho realidad.

Inteligencia corporal-cinestésica

La inteligencia corporal es una forma de inteligencia que se refiere a la habilidad de utilizar el cuerpo para expresarse y resolver problemas. Las personas con alta inteligencia corporal tienen una buena coordinación, equilibrio y destreza física, lo que les permite, por ejemplo, bailar, jugar deportes y realizar tareas manuales. La inteligencia corporal también se relaciona con la capacidad de sentir y controlar las emociones a través del lenguaje corporal y el contacto físico. Esta forma de inteligencia es importante en áreas como el teatro, la danza y la educación física.

Son ampliamente conocidos los videos de Boston Dynamics en los que vemos como robots cada vez más sofisticados, caminan, saltan, hacen piruetas o realizan trabajos sencillos

No es comparable lo que consiguen los robots con lo que podemos hacer los humanos en un teatro lleno de espectadores disfrutando con un ballet o con cualquier tipo de espectáculo. La danza puede ser una forma hermosa de expresión artística que combina el movimiento corporal, la música y el ritmo. Los bailarines pueden crear una gran variedad de efectos visuales y emocionales mediante el uso de diferentes movimientos, estilos y técnicas. La belleza de la danza está en su capacidad para transmitir emociones, contar historias y crear conexiones entre las personas a través del lenguaje del cuerpo. Esto, todavía, no lo pueden hacer los robots.

Os animo a ver el siguiente video en el que los alumnos del conservatorio de Mariemma preparan la actuación de final de curso. El sentimiento y la capacidad de combinar de elementos para crear un espectáculo de este tipo, no están al alcance de las máquinas.

Tipos de inteligencia todavía no desarrollada por las máquinas

Como hemos visto, las máquinas empiezan a ser plenamente competentes en campos que antes eran impensables o simplemente formaban parte de la ciencia ficción. Todavía no hay ninguna entidad artificial que sea capaz de orquestas todas estas capacidades con la adaptabilidad de los seres humanos, pero vemos como de forma separada empiezan a despuntar en muchos campos.

Los reductos en los que las máquinas todavía no demuestra cierta competencia son los relacionados con la inteligencia intrapersonal (capacidad para entenderse a sí mismos), la inteligencia interpersonal (capacidad para relacionarse y llevarse bien con otras personas) o la inteligencia emocional, entendida como autoconciencia, autocontrol, automotivación, empatía y habilidades sociales. Este tipo de inteligencia podría estar ya abordado por las máquinas, cuando nos hacen por ejemplo, detección de emociones.

La inteligencia existencial (capacidad para reflexionar sobre la propia existencia) es quizás la última frontera antes de que las máquinas adquieran capacidades de inteligencia realmente comparables con la humana. Mientras tanto veremos como surgen nuevas herramientas inteligentes cada vez más sofisticadas, aunque como hemos visto, el listón lo hemos puesto realmente alto. Las máquinas inteligentes, no son una amenaza, son una herramienta más que tenemos que aprender a utilizar y una gran oportunidad para acelerar el progreso.

La IA que sueña poesía con imágenes sintéticas

Desque que aparecieron los grandes modelos de tipo GPT-3, asistimos a una revolución en la generación de contenidos sintéticos. La aceleración del proceso creativo y la exploración de nuevas formas de arte ya es una realidad. Amenaza para algunos, oportunidad para otros, lo que está claro es que esta nueva herramienta cognitiva ha venido para quedarse.

Anteriormente vimos como generar retratos de Lorca, o como generar una historia con openai. Incluso probamos como escribir un pequeño ensayo sobre el metaverso. Vamos a experimentar con la generación de imágenes sintéticas para evaluar su aplicación para ilustrar poemas usando como entrada el texto de cada verso junto con alguna indicación del estilo de las imágenes a generar.

NOCHE DEL AMOR INSOMNE

(Federico García Lorca)

Noche arriba los dos con luna llena,
yo me puse a llorar y tú reías.
Tu desdén era un dios, las quejas mías
momentos y palomas en cadena.

Noche abajo los dos. Cristal de pena,
llorabas tú por hondas lejanías.
Mi dolor era un grupo de agonías
sobre tu débil corazón de arena.

La aurora nos unió sobre la cama,
las bocas puestas sobre el chorro helado
de una sangre sin fin que se derrama.

Y el sol entró por el balcón cerrado
y el coral de la vida abrió su rama
sobre mi corazón amortajado.

Retratos de Lorca sintetizados digitalmente

Retrato de Federico García Lorca

El arte siempre ha estado muy ligado a la tecnología del momento influyendo en las artes plásticas. El arte en la prehistoria ha perdurado hasta nuestros días en los dibujos y marcas realizados en cuevas. Las matemáticas influyeron en la creación de pinturas con perspectiva durante El Renacimiento y desde que se inventó la fotografía, de nuevo, la pintura, con el impresionismo se reinventó mostrando nuevas formas de mostrar la realidad.

Ahora, con la aparición de los grandes modelos de Inteligencia Artificial, quizás nos toque volver a vivir un nuevo movimiento creativo, en el que los contenido sintéticos se mezclan con las ideas creativas de los artistas, en el que la técnica se libera de las limitaciones que impone el hecho de dominar una serie de destrezas que no todo el mundo puede o ha podido desarrollar.

Ya no es necesario saber dibujar para iniciarse en el proceso creativo. Las ideas pueden hacerse realidad en cuestión de segundos, utilizando las herramientas que hoy están a disposición de todos. Open AI, Dall-e 2, Stable Diffusion y muchos otros que surgirán en los próximos meses o incluso semanas, viendo al ritmo que están proliferando.

Veamos el resultado aplicado a la generación de retratos del poeta con más influencia y popularidad de la literatura española del siglo XX, Federico García Lorca.

Todos estos retratos han sido generados por el modelo de Inteligencia Artificial Stable Diffusion utilizando el siguiente prompt:

prompt = «portrait Anime Federico García Lorca cute-fine-face, pretty face, realistic shaded Perfect face, fine details. realistic shaded lighting by Ilya Kuvshinov Giuseppe Dangelico Pino and Michael Garmash and Rob Rey, IAMAG premiere, aaaa achievement collection, elegant freckles, fabulous machine»

Texto utilizado para generar los retratos de Lorca con el modelo Stable Diffusion

Como habrás podido ver, no todas las imágenes tienen un parecido con el poeta granadino, pero sí que todas ellas tienen una serie de rasgos característicos, el pelo oscuro y las cejas abundantes. Tengamos en cuenta que estas imágenes no existían antes de ejecutar el modelo.

Las hemos creado a partir de un texto con el que expresamos que queremos un retrato del también dramaturgo Federico, siguiendo un estilo pictórico determinado (Picasso, Anime, Digital Art, impresionismo romántico…). En pocos minutos podemos generar decenas de imágenes para seleccionar las que se adapten mejor a lo que estemos buscando para luego afinar mejor nuestra idea o proyecto.

Esto es, sencillamente, espectacular.

Sistema de riego con arduino

Vamos a construir un sistema de riego automático con Arduino controlado por voz a través de Alexa.

Imagen artística de arduino generada por una IA
Imagen artística de arduino generada por una IA

Gracias a todo el contenido que muchas personas comparten en Internet, he podido introducirme en el mundo del IoT. Quiero agradecer con mi humilde contribución, la generosidad de todos aquellos que ayudan a los demás compartiendo su conocimiento.

¿En qué consiste el proyecto?

La mejor forma de aprender en esto del IoT es marcarse un reto y empezar a buscar soluciones, investigando y leyendo sobre todas las materias que necesitas para llevarlo a cabo.

El reto que vamos a abordar, es el de construir un sistema de riego automático para unas jardineras. El sistema consiste en unos sensores de humedad de suelo, un dispositivo ESP8266 y una pequeña bomba de agua que se acciona cuando la humedad del suelo es muy baja.

El sistema está conectado a Internet a través de WiFi, de forma que podamos consumir un servicio MQTT con el que poder controlar los parámetros básicos del sistema de forma remota. Además escribimos en una base de datos de ThingSpeak todas las lecturas de los sensores de humedad para poder visualizar en todo momento el estado del sistema de riego.

Finalmente configuramos Alexa para poder accionar el riego y pararlo en cualquier momento o incluso usar las skills de Alexa para programar el horario y la duración de los períodos de riego.

Los sensores de humedad son muy poco fiables y tienen muchas variaciones en las medidas. Esto complica enormemente encontrar el valor correcto con el que determinar cuando la tierra no tiene humedad para activar la bomba de agua. Un valor muy alto implicará que la bomba no se activará nunca y un valor demasiado bajo podría llevarnos a que la bomba riegue demasiado.

Para evitarlo, usamos 4 sensores distribuidos por la jardinera de forma que calculamos la media de las 4 medidas. Para tomar las medidas de cada sensor, realizamos a su vez varias lecturas cada pocos milisegundos para minimizar el efecto del ruido de este tipo de sensores.

La lectura de la humedad del suelo varía incluso en función de la humedad relativa del aire o en función de la incidencia del sol en la tierra. Esto también dificulta encontrar el valor correcto de humedad en el que se debe disparar la bomba de agua. Fijar este valor en el código es bastante tediosa, ya que cada vez que tengas que cambiarlo te obliga a compilar y cargar de nuevo el código en el ESP8266.

La solución a este problema la encontramos usando un servidor MQTT. En mi caso he usado Adafruit por ser gratuito. Implemento un feed para definir el límite de humedad por encima del cual se debe accionar la bomba de agua y otro para implementar el tiempo de riego medido en segundos. Con estos dos valores puedo controlar el funcionamiento de todo el sistema.

Componentes

Empecemos por recopilar los componentes que necesitamos para desarrollar el sistema:

  • 1 módulo ESP8266 (aliexpress / amazon)
  • 1 relé (aliexpress / amazon)
  • 1 multiplexor CD74HC4067 (aliexpress / amazon)
  • 4 Sensores de humedad (aliexpress / amazon). Os recomiendo este tipo de sensor, hay otros que tienen dos patillas que se estropean muy rápido.
  • 1 bomba de agua (aliexpress / amazon)
  • 1 placa de islas para hacer las conexiones (aliexpress / amazon)
  • 1 transformador AC/DC de 5V (en mi caso es reciclado de un electrodoméstico viejo)
  • Combo de Amazon (1 Canal 5V Relé Módulo + Sensor de Humedad del Suelo + Mini Bomba de Agua DC 3V 5V + 1M Tubería de Agua de PVC)
Componentes
Componentes

Adicionalmente a los componentes electrónicos, necesitaremos tubo de riego, conectores, goteros y un depósito de agua.

Diseño

En el siguiente diseño esquemático puedes ver las conexiones del sistema. La alimentación a 5V está proporcionada por un cargador reciclado.

Diseño para riego automático en arduino
Diseño para riego automático en arduino

Aunque el diseño es sencillo, es aconsejable probar por partes el circuito.

Antes de usar el multiplexor, puedes probar el diseño configurando un solo sensor de humedad, que deberá ir en la única entrada analógica que dispone el ESP8266.

Configuración de la conexión con ThingSpeak

ThingSpeak™ es un servicio de plataforma de análisis de IoT que le permite agregar, visualizar y analizar flujos de datos en tiempo real en la nube. ThingSpeak proporciona visualizaciones instantáneas de los datos publicados por sus dispositivos en ThingSpeak. Con la capacidad de ejecutar código MATLAB® en ThingSpeak, puede realizar análisis y procesamiento en línea de los datos a medida que ingresan. ThingSpeak se usa a menudo para la creación de prototipos y la prueba de concepto de sistemas IoT que requieren análisis.

Empecemos con la creación del canal:

  1. Una vez que te hayas registrado, ve a la sección My Channels para crear una canal nuevo.
Creación de un canal en ThingSpeak
Creación de un canal en ThingSpeak

2. Escribe el nombre que quieras para tu canal junto con una pequeña descripción. A continuación indican los campos que vamos a rellenar desde nuestro sistema de riego. Es importante que mantengas estos nombres. En el caso de que quieras cambiarlos, deberás ajustar el código en consecuencia.

Configuración de un canal en ThingSpeak
Configuración de un canal en ThingSpeak

3. Una vez creado el canal, ve a la sección API Keys y copia los valores del Channel ID y de la Write API Key. Los necesitarás para configurar el código más adelante.

API Key del canal de ThingSpeak
API Key del canal de ThingSpeak
// Variables para definir la conexión con ThingSpeak
unsigned long myChannelNumber = 1234567; //Código de canal de Things Speak
const char * myWriteAPIKey = "API_KEY"; // Indicar aquí el código de escritura de ThingSpeak

4. Por último, ve a la sección privada para componer la visualización de los datos según tus preferencias.

Composición del Dashboard en ThingSpeak
Composición del Dashboard en ThingSpeak

Configuración de la conexión con Adafruit IO

Para poder manejar nuestro sistema de riego, vamos a usar un servidor MQTT publicado con Adafruit.

Vamos a definir dos variables, una a la que llamaremos humedad y que nos permitirá configurar el nivel de humedad con el que queremos activar la bomba. Recuerda que valores altos, indican una humedad más baja.

La otra variable, que llamaremos tiempo_de_riego, la usaremos para poder configurar el tiempo de riego antes de parar la bomba y volver a consultar los valores de humedad. Esto veréis que os dará mucho juego para poder configurar el riego como queráis. Es importante que no pongas un tiempo de riego muy elevado para evitar que se queme la bomba.

Creación de feeds en Adafruit IO
Creación de feeds en Adafruit IO

Una vez que tengas creadas las dos variables (las variables, se llaman Feed en Adafruit), busca la información acerca del MQTT Key, que lo necesitarás también en el código.

Parámetros MQTT del feed creado en Adafruit IO
Parámetros MQTT del feed creado en Adafruit IO

Una vez tengas las cadenas de MQTT Key, pulsa sobre el icono de la llave sobre fondo amarillo para activar el token de acceso seguro. Recuerda mantener estos valores en un lugar seguro. Copia de esta pantalla, el username y la active key.

Adafruit IO Key
Adafruit IO Key

Por último configura un dashboard para poder configurar las dos variables de humedad y tiempo_de_riego de forma fácil.

Truco: Puedes hacerte un acceso directo a este dashboard en tu móvil para poder ajustar los valores del sistema de riego cuando quieras.

Dashboard en Adafruit IO
Dashboard en Adafruit IO

Con esto lo tendremos todos para probar el código. Lo que haremos será suscribirnos a estos dos canales MQTT de forma que nuestro sistema lea los valores de configuración para humedad y tiempo de riego.


Código

A continuación tienes el código completo, pero recuerda que es mejor que vayas montándolo por partes, para asegurarte que todo va encajando bien, el hardware y las conexiones con ThingSpeak y Adafruit.

#include <ESP8266WiFi.h>; // Para la conexión WiFi
#include "ThingSpeak.h" // Para enviar los datos a ThingSpeak
#include <DHT.h> 
#include "Adafruit_MQTT.h" // Para conectar con 
#include "Adafruit_MQTT_Client.h"
// Definición de parámetros para servidor MQTT de Adafruit
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT  1883
#define AIO_NAME "AIO_NAME" // Sustituir por vuestra cuenta de Adafruit IO
#define AIO_KEY "/feeds/humedad"
#define AIO_PASS "AIO_PASS" // Sustituir por la password de Adafruit IO
#define MAXSUBSCRIPTIONS 5
WiFiClient  client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_NAME, AIO_PASS);
Adafruit_MQTT_Subscribe limite_humedad = Adafruit_MQTT_Subscribe(&mqtt, "JacoboAriza/feeds/humedad");
Adafruit_MQTT_Subscribe tiempo_de_riego = Adafruit_MQTT_Subscribe(&mqtt, "JacoboAriza/feeds/tiempo_de_riego");
Adafruit_MQTT_Publish humedad_mqtt = Adafruit_MQTT_Publish(&mqtt, "JacoboAriza/feeds/humedad/get");
Adafruit_MQTT_Publish riego_mqtt = Adafruit_MQTT_Publish(&mqtt, "JacoboAriza/feeds/tiempo_de_riego/get");
// Usuarios y claves para la conexión WiFi
char ssid[] = "NOMBRE_WIFI_01"; //SSID - Red WiFi a la que me conecto
char pass[] = "PASSWORD_WIFI_01"; // Passowrd de la red WiFi
String ssis2 = "NOMBRE_WIFI_02"; //SSID - Red WiFi a la que me conecto
String pass2 = "PASSWORD_WIFI_02"; // Passowrd de la red WiFi
String ssid3 = "NOMBRE_WIFI_03"; //SSID - Red WiFi a la que me conecto
String pass3 = "PASSWORD_WIFI_03"; // Passowrd de la red WiFi
// Variables para definir la conexión con ThingSpeak
unsigned long myChannelNumber = 1234567; //Código de canal de Things Speak
const char * myWriteAPIKey = "API_KEY"; // Indicar aquí el código de escritura de ThingSpeak
// Variables a definir según la configuración deseada
const int numero_de_sensores = 4; // Número de sensores de humedad
const int numero_de_medidas = 10; // Número de medidas para hacer la media
int motorPin = 14;
int limite_medida = 900;
int tiempo_de_riego_maximo = 60; 
int entrada_sensor_humedad = A0; // Entrada analógica con las entradas de los sensores de humedad.
int multiplexor[4] = {5,4,0,2};
int sensores[4][numero_de_sensores] = {{0,0,0,0},{1,0,0,0},{0,1,0,0},{1,1,0,0}};
float medidas[numero_de_sensores];
String texto = "";
float value_1 = 0;
float valor = 0;
String value = "";
// --------------------------------------------------------------------------------------------- //
// Descripción: Parametrización inicial                                                          //
// --------------------------------------------------------------------------------------------- //
void setup() {
  pinMode(entrada_sensor_humedad, INPUT);
  pinMode(motorPin, OUTPUT);
  pinMode(multiplexor[0], OUTPUT);
  pinMode(multiplexor[1], OUTPUT);
  pinMode(multiplexor[2], OUTPUT);
  pinMode(multiplexor[3], OUTPUT);
  Serial.begin(9600);
  digitalWrite(motorPin, HIGH);
  WiFi.mode(WIFI_STA);
  ThingSpeak.begin(client);
  internet();
  mqtt.subscribe(&limite_humedad);  
  mqtt.subscribe(&tiempo_de_riego);
}
// --------------------------------------------------------------------------------------------- //
// Descripción: Función principal                                                                //
// --------------------------------------------------------------------------------------------- //
void loop() {
  // Nos conectamos al servidor MQTT donde tenemos los parámetros de configuración que regulan el riego: 
  // 1. Límite de humedad para accionar la bomba.
  // 2. Número de segundos en los que se activa la bomba en cada ciclo.
  MQTT_connect();
  // Este bloque de código sirve para forzar que la lectura posterior siempre se realice. 
  Serial.println ("Leyendo variables...");
  if (! humedad_mqtt.publish(0)) {
    Serial.println(F("Failed"));
  } else {
    Serial.println(F("OK!"));
  }
  // Leemos el último valor publicado
  Adafruit_MQTT_Subscribe * subscription;
  while (subscription = mqtt.readSubscription(5000)) {
    if (subscription == &limite_humedad)
    {
      Serial.print("Límite: ");
      texto = ((char *) limite_humedad.lastread);
      limite_medida = texto.toInt();
      Serial.println(texto);
    }
  }
  // Este bloque de código sirve para forzar que la lectura posterior siempre se realice.
  if (! riego_mqtt.publish(0)) {
    Serial.println(F("Failed"));
  } else {
    Serial.println(F("OK!"));
  }
  while (subscription = mqtt.readSubscription(5000)) {
    if (subscription == &tiempo_de_riego)
    {
      Serial.print("Tiempo de riego: ");
      texto = ((char *) tiempo_de_riego.lastread);
      tiempo_de_riego_maximo = texto.toInt();
      Serial.println(texto);
    }
  }
  
  // Ping al servidor para mantener la conexión mqtt activa
  if (!mqtt.ping())
  {
    mqtt.disconnect();
  }
 
  Serial.println("___________");
  
  // Comenzamos con las lecturas de los sensores y con el cálculo de cada medida
  float medida = 0;
  float media_de_las_medidas = 0;
  for (int i = 0; i < numero_de_sensores; i++){
    for (int j = 0; j < 4; j++){
      digitalWrite(multiplexor[j],sensores[i][j]); // Escribimos la codificación asociada a cada sensor para solicitar la medida al multiplexor.
    }
    medida = 0; // inicializamos la medida
    for (int m = 0; m < numero_de_medidas; m++){ // Para establecer cada medida, hacemos 10 lecturas y calculamos la media
      valor = analogRead(entrada_sensor_humedad);
      medida = medida + valor;
    }
    medida = medida / numero_de_medidas;
    media_de_las_medidas = media_de_las_medidas + medida;
    medidas[i] = medida; // vamos escribiendo en la matriz de medidas todas los valores calculados
    Serial.print("i:");
    Serial.print(i);
    Serial.print(", valor:");
    Serial.println(medida);
    delay(2000);    
  }
  // Esperamos 8 segundos antes de subir los datos a ThingSpeak, de forma que no saturemos al servidor.
  delay(8000);
  subir_datos(medidas);
  // Calculamos la medida de las medidas de los sensores
  media_de_las_medidas = media_de_las_medidas / numero_de_sensores; 
  
  // A continuación verificamos las variables definidas en el servidor MQTT
  Serial.print ("Verificando límite de humedad. Límite de medida: ");
  Serial.println (limite_medida);
  
  // Si la media de las medidas es mayor que el límite fijado en el servidor MQTT, accionamos la bomba por el tiempo definido. 
  if (media_de_las_medidas > limite_medida){
    Serial.print ("Iniciando el riego durante ");
    Serial.print (tiempo_de_riego_maximo);
    Serial.println (" segundos...");
    digitalWrite(motorPin, LOW); // Activamos el relé que acciona la bomba.
    delay(tiempo_de_riego_maximo*1000);
  }
  digitalWrite(motorPin, HIGH); // Desactivamos el relé de la bomba.
  if (WiFi.status() != WL_CONNECTED){ // Si el módulo se desconecta de la red WiFi, lo intentamos de nuevo.
    internet();
  }
}
// --------------------------------------------------------------------------------------------- //
// Descripción: Función para conectarse a la red WiFi                                            //
// Nota: Durante las pruebas observé desconexiones frecuentes. Por este motivo he añadido la     //
// opción de ir alternando entre dos de las redes WiFi que tengo en casa. Por favor ajustar      //
// esta función según las necesidades particulares de cada uno.                                  //
// --------------------------------------------------------------------------------------------- //
void internet()
{
  int intentos = 0;
  int intercambia = 0;
  Serial.println("Iniciando conexión: ");
  if (WiFi.status() != WL_CONNECTED)
  {
    while (WiFi.status() != WL_CONNECTED)
    {
      WiFi.begin(ssid, pass);
      delay(5000);
      Serial.print(".");
      if (intercambia == 0){
        char ssid[] = "MIWIFI_2G_TJYY_EXT"; //SSID - Red WiFi a la que me conecto
        char pass[] = "DR32Uy6T"; // Passowrd de la red WiFi
        intercambia = 1;
      }else{
        char ssid[] = "devolo-029"; //SSID - Red WiFi a la que me conecto
        char pass[] = "WYKPYBLHGUASQNFA"; // Passowrd de la red WiFi
        intercambia = 0;
      }
    }
    Serial.println("");
    Serial.println("WiFi conectado");
  }
}
// --------------------------------------------------------------------------------------------- //
// Descripción: Función para subir los datos al servidor de ThingSpeak. Subimos las 4 medidas    //
// de los sensores de humedad más la media de dichas medidas.                                    //
// --------------------------------------------------------------------------------------------- //
void subir_datos(float medidas[numero_de_sensores]){
  int canal = 0;
  float media = 0;
  media = 0;
  for (int i=0; i < numero_de_sensores; i++){ // En los canales del 1 al 4 almacenamos las medidas de los sensores
    canal = i+1;
    media = media + medidas[i];
    ThingSpeak.setField(canal,medidas[i]);
  }
  media = media / numero_de_sensores;
  ThingSpeak.setField(5,media); // Calculamos la media de las medidas
  // Hacemos un primer intento de subir los datos. Al usar una cuenta gratuita tenemos limitación sobre la velocidad a la que podemos subir información. 
  // En el caso de que falle, probamos pasados 2 segundos.
  int mensaje = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);  
  if (mensaje == 200){
    Serial.println("Canal actualizado correctamente.");
  }
  else{
    delay(2000);
    if (mensaje == 200){
      Serial.println("Canal actualizado correctamente.");
    }
    else{
      Serial.println("Problema actualizando el canal. Código de error HTTP " + String(mensaje));
    }
  }
}
// --------------------------------------------------------------------------------------------- //
// Descripción: Función para conectarse al servicio MQTT de Adafruit IO                          //
// --------------------------------------------------------------------------------------------- //
void MQTT_connect() 
{
  int8_t ret;
  // Si ya estamos conectados, salimos de la función.
  if (mqtt.connected())
  {
    return;
  }
  Serial.print("Conectándose al servidor MQTT... ");
  uint8_t retries = 3; // definimos un número máximo de 3 intentos
  while ((ret = mqtt.connect()) != 0)
  { 
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Reintentando la conexión con el servidor MQTT en 5 segundos...");
    mqtt.disconnect();
    delay(5000);  // espera de 5 segundos
    retries--;
    if (retries == 0) 
    {
      // basically die and wait for WDT to reset me
      while (1);
    }
  }
  Serial.println("MQTT conectado!");
}

Montaje

Así es como queda finalmente:

Montaje final del sistema de riego
Montaje final del sistema de riego

El montaje de las cajas estancas es gracias a Ángel y a su impresora 3D. Os animo a visitar su página que contiene proyectos muy interesantes sobre Arduino y con la Alhambra FPGA.

Caja para proteger al sensor
Caja para proteger al sensor

Configuración de la conexión con Alexa

Ya lo tenemos todo funcionando y ahora, ¿por qué no conectar nuestro sistema con Alexa? De esa forma podremos controlar por voz nuestro sistema de riego.

Para ello necesitaremos configurar un pequeño servicio con IFTTT y con el a su vez podremos configurar las skills de Alexa según nuestras necesidades. Yo lo utilizo para poder regar cuando lo necesite simplemente diciendo «Alexa, riega las plantas». También para configurar el riego de forma automática en los días que quiera, por la duración que necesite y a la hora deseada.

Básicamente nos conectaremos con Alexa a nuestro servidor MQTT definido en Adafruit IO a través de IFTTT, de forma que cambiemos el valor de humedad con el que se activa el riego. Por ejemplo, bajando el nivel de humedad a 0, estaremos asegurando que la bomba se active y empieza a regar. Del mismo modo, cuando queremos que deje de regar, enviaremos al servidor MQTT un valor alto de humedad y nuestra bomba se parará.

Vamos primero a configurar el servicio IFTTT activando la integración con Alexa y con Adafruit:

Publicamos dos applets, uno para iniciar el riego y otro para pararlo. Estos dos applet los podrás utilizar después desde Alexa para definir las skills.

Applets publicados en IFTTT
Applets publicados en IFTTT

Los dos applets siguen el siguiente esquema. Si en Alexa dices una frase en particular, entonces enviamos un valor al servicio MQTT humedad definido en Adafruit:

Esquema del applet en IFTTT
Esquema del applet en IFTTT

Enviamos el valor 0 para empezar a regar:

Parametrización del applet en IFTTT
Parametrización del applet en IFTTT

Y el valor 900 para dejar de regar:

Parametrización del applet en IFTTT
Parametrización del applet en IFTTT

Una vez lo tengas conectado solo tendrás que definir la rutina que quieras:

Definición de rutina en Alexa
Definición de rutina en Alexa

Consejos

Durante las pruebas, me he encontrado muchos problemas. Uno de ellos aunque ahora me parece obvio es el de los vasos comunicantes. Después de cada ciclo de riego empecé a observar que el agua del depósito se vaciaba muy deprisa y siempre que comprobaba los niveles me encontraba el depósito medio vacío. Empecé a sospechar que podría ser algún problema con el código y que se me quedaba en algunas situaciones el motor encendido.

Pero no, simplemente cuando dejaba de activar la bomba, la goma de riego estaba completamente llena y según el dichoso principio de los vasos comunicantes, el agua tendía a equilibrar los niveles. Cosa que significaba que el depósito se me vaciaba justo hasta el nivel del gotero que se encontraba a mayor altura.

Es decir la bomba, aunque esté apagada no corta la conexión con el tubo del riego. ¿Cómo lo he resuelto? He colocado esta conexión en el circuito de riego, entre el depósito y las jardineras, ubicada a una altura mayor que el nivel máximo del depósito. Regulando el gotero para que salgan apenas unas gotas (lo he colocado justo encima de una de las jardineras y así no desperdicio agua), consigo romper la estanqueidad del circuito y problema resuelto.

Truco para romper los vasos comunicantes
Truco para romper los vasos comunicantes

Otro de los problema ha sido con las cajas estancas. Al estar selladas con silicona, cuando hace demasiado calor, el aire que contienen se calienta mucho y se expande, llegando a romper algunas de las juntas. Para este problema te recomiendo aplicar dos medidas: la primera es no usar una pistola de silicona caliente, sino algún otro material que resista mejor los cambios de temperatura, como silicona apta para exteriores o cualquier otro pegamento que puedas encontrar en el mercado.

La segunda medida es pintar de blanco las carcasas, de esa forma reduces mucho el calor, sobre todo si el color del hilo utilizado en la impresora 3D es de algún color muy oscuro.

Sensor de humedad
Sensor de humedad

Después de varios meses, es posible que el agua pudiera generar algún tipo de algas. Aprovecha cuando tengas el bidón vacío para limpiarlas, ya que pueden llegar a atorar la bomba.

Por otro lado, es posible que el cable de la bomba sea muy corto y te quede alguna soldadura sumergida debajo del agua. En este caso, si que puedes usar una pistola de silicona líquida para sellar la soldadura.

Algas en el depósito de agua
Algas en el depósito de agua

Referencias

Os dejo algunas referencias que he consultado en Internet para ir componiendo el proyecto, cachito a cachito:


https://learn.adafruit.com/adafruit-io-basics-esp8266-arduino/arduino-io-library

https://learn.adafruit.com/

https://learn.adafruit.com/adafruit-io-basics-esp8266-arduino/arduino-io-library

Guía para conectar tu ESP8266 con Google Assistant usando IFTTT (solectroshop.com)

Intro to Adafruit_MQTT | MQTT, Adafruit IO & You! | Adafruit Learning System

MQTT using AdafruitIO and ESP8266 | LEARN @ CIRCUITROCKS

Adafruit_MQTT_Library/adafruitio_time_esp8266.ino at master · adafruit/Adafruit_MQTT_Library (github.com)

MQTT using AdafruitIO and ESP8266 | LEARN @ CIRCUITROCKS

Conclusiones finales

En este proyecto hemos aplicado muchos conceptos que no es fácil encontrar juntos. Hablamos de conexión de un dispositivo Arduino a través de Internet, envío de información para su explotación en ThingSpeak, conexión con un servidor MQTT y control por voz a través de Alexa.

Aquí os dejo el fruto (nunca mejor dicho) de este proyecto, un montón de cosas aprendidas y una pequeña cosecha de tomates cultivados en casa. Rico, rico.

Tomates
Tomates

Estas imágenes tampoco las he creado yo

Ya hemos visto como una máquina puede generar textos con sentido de forma automática. Ahora Openai, ha liberado su nuevo modelo que se denomina dalle2 y que permite generar imágenes a partir de descripciones en lenguaje natural.

Probando Dalle 2

«Un cubo de Rubik en 4k hecho de fruta

«Running in an apocalyptic landscape in Madrid. Digital art»

«Una pájaro tomando una cerveza en la playa en arte digital»

«Elefantes paseando en la Alhambra»

La generación de contenidos sintéticos ya es una realidad y en breve veremos como se pueden generar secuencias animadas o videos.

La generación de contenidos sintéticos combinada con el metaverso abre un campo infinito para nuevas aplicaciones y usos. Lo que vemos, oímos o leemos puede ser o no ser contenido generado por un ser humano.

Sensores

El mundo del Internet de las cosas, IoT por sus siglas en inglés (Internet of Things) está al alcance de todo el mundo. Basta un poco de electrónica que se puede conseguir por pocos euros y conexión a Internet.

Con un ESP8266 y algunos sensores puedes empezar a jugar. Puedes monitorizar en tiempo real la temperatura y la humedad. En los siguientes gráficos puedes ver en tiempo real las oscilaciones de temperatura y la humedad del suelo:

Este artículo no lo he escrito yo

black and white photo of human hand and robot hand
Photo by Tara Winstead on Pexels.com

Muchas personas piensan que la Inteligencia Artificial es una amenaza para nuestros puestos de trabajo. Estamos ante una nueva herramienta, que necesita por supuesto de normativas de control, pero que más que una amenaza, es un instrumento que potencia nuestras capacidades. No solo las capacidades físicas, como era el caso de las herramientas a las que estamos tan acostumbrados, como pueden ser una excavadora o una cosechadora, sino que ahora podemos potenciar nuestras capacidades cognitivas.

El siguiente ejemplo vamos a ver como un artículo completo puede ser elaborado por una Inteligencia Artificial. Simplemente he partido de la siguiente instrucción:

Instrucciones proporcionadas al modelo de openai

A partir de aquí, todo el contenido está generado por una máquina solo con la instrucción que le he indicado en lenguaje natural.

Texto generado automáticamente hablando del metaverso

«El metaverso es una realidad virtual en la que los usuarios pueden interactuar y experimentar de manera inmersiva.

A diferencia de otros mundos virtuales, el metaverso está conectado a una red global de computadoras, lo que permite que los usuarios de todo el mundo se encuentren y colaboren en el mismo espacio.

A corto plazo, el metaverso podría ofrecer una gran cantidad de oportunidades para el aprendizaje, la investigación y el desarrollo de nuevas tecnologías.

También podría ser utilizado como una plataforma para la creación de nuevos mundos virtuales, que podrían ser utilizados para el entretenimiento, la educación o el trabajo. En el futuro, el metaverso podría convertirse en la principal forma en la que la gente interactúa con la tecnología, y podría transformar la forma en la que se lleva a cabo el comercio, la educación y la investigación.

El metaverso es una idea que ha sido explorada por la ciencia ficción durante muchos años, y ahora está comenzando a convertirse en una realidad. A medida que avanzan las tecnologías de realidad virtual, se está haciendo cada vez más posible la creación de mundos virtuales inmersivos y realistas.

La clave para el éxito del metaverso será su capacidad para atraer y mantener a un gran número de usuarios, y se espera que se convierta en una plataforma muy utilizada en los próximos años.»

¿No os parece fascinante?

Conoce a Cylon y habla con una inteligencia artificial

Robot cylon

Robot cylon

¿Pueden pensar las máquinas?

Podemos decir categóricamente que por ahora no. Lo único a lo que podemos aspirar de momento es a simular algunas características para crear respuestas que se parezcan a las que daría un humano. En este contexto, surgen los bots, chatbots o asistentes virtuales que nos permiten interactuar con una máquina utilizando nuestro propio idioma. Más abajo podrás hablar con una inteligencia artificial.

Cuando tenía unos 5 años, vi una serie que me marcó para siempre. Se trata de Galáctica Estrella de Combate. En esa sería salían unos robots que se llamaban Cylon que se rebelaron contra sus creadores. Es el típico argumento de muchas historias de ciencia ficción, lo sé, pero de cosas sencillas como estas, se van construyendo los sueños y las aficiones. Os dejo un enlace con algunos vídeos sobre esta fantástica serie:

He programado este asistente Cylon para que puedas jugar con él.

En el siguiente frame puedes chatear en español con la inteligencia artificial cylon. Responde a preguntas sencillas como a ¿Qué tiempo hace en Madrid?, ¿Qué es una Galaxia? o ¿Quién es Cristiano Ronaldo?. Recientemente le he incorporado el modelo GPT-3 de open.ai que muestra un comportamiento muy interesante al mantener conversaciones sobre cualquier tema.

Puedes ver otras aplicaciones de GPT-3 en este artículo (este modelo se puede usar para escribir historias sintéticas).

¡Recuerda ser amable con él!, todavía está aprendiendo. 🙂

También lo puedes usar en telegram. Escanea este código QR y prueba conversaciones interesantes con el asistente.

Asistente Cylon para Telegram

Asistente Cylon para Telegram

Ramas de la Inteligencia Artificial

¿Qué es la Inteligencia Artificial?

Pues la verdad es que una pregunta difícil de responder en pocas palabras. Podemos decir es una rama de las Ciencias de la Computación que abarca un gran número de disciplinas y de técnicas. Y como una imagen vale más que mil palabras…

Ramas de la Inteligencia Artificial
Ramas de la Inteligencia Artificial

GPT-3, la Inteligencia Artificial que escribe relatos

Recientemente pude acceder a probar el modelo GPT-3 desarrollado por openai. Se trata de un modelo de lenguaje autorregresivo que usa Deep Learning para generar texto coherente y contextualizado similar al que podría producir un humano. Sus siglas en inglés significan Generative Pre-trained Transformer 3. El modelo ha sido entrenado con diversas fuentes de información disponibles en Internet con una capacidad de 175.000 millones de parámetros de aprendizaje. Se publicó en mayo de 2020 y desde entonces ha generado una gran expectación.

Haciendo algunas pruebas preliminares, resulta fascinante ver cómo es capaz de generar texto a partir de las entradas que se le proporcionan. Es verdad que no siempre obtiene resultados precisos, sobre todo en diálogos prolongados, pero no deja indiferente la fluidez y la «creatividad» con la que genera el texto. Yo me quedé impresionado.

He intentado comprobar la capacidad que tiene el modelo en generar relatos cortos de ficción. Lo primero que hay tener en cuenta es no generar textos demasiado largos para que no empieza a divagar. Además es importante hacer un ajuste equilibrado entre creatividad y conservación del contexto. Si fuerzas demasiado la creatividad, puedes observar cómo pasados algunas párrafos, el texto generado pierde coherencia con respecto a lo escrito en precedencia. En cambio, si fijas valores demasiado rígidos con los que respetar el contexto, a veces se repite demasiado.

La siguiente historia ha sido escrita de forma autónoma por el modelo GPT-3 partiendo de la siguiente frase: «Nuestra historia empezó en Sierra Nevada

A partir de ahí el modelo empieza a escribir el relato que os dejo a continuación sin editar. Por cierto, no tengo ni idea de lo que es «la Jamaspiña». Si alguien se entera por favor comentar, 🙂

Historia generada por GPT-3 sin editar

Nuestra historia empezó en Sierra Nevada. Desde Granada se veía la nieve imponente intermitentemente iluminada por los rayos del Sol. Había que escaparse de la Jamaspiña y los hollín de la Santa Fe foráneos, extirpar con urgencia el agujero negro en donde caíamos sin cesar y ponerse bien al sol de Sierra Nevada.Nada más estar en el pueblo trabajando nos dio por ir a las montañas. Había empezado el invierno. En los primeros días de enero ya había tres paladas de nieve. Lo vieron como una buena opción para disfrutar de las montañas del interior, además de tener dos días francos y poderse llevar el coche hacia allá. Cuatro coches emprendieron la marcha en dirección al pueblo de Pampaneira, a la altura de Granada.Una vez llegados, ya que no era posible que todos pudieran aparcar por la nieve, los sufragistas fueron a buscar un camino alternativo al que tomaran los demás. Montaron las bicis en la parte trasera, tan contentos, pensando que nos divertiríamos un montón. Las tres horas y media de viaje sonaba bien hasta que con la primera carga de nieve a cuestas se desató el problema.Para los amantes de las rutas deportivas de alta dificultad, así como para corredores profesionales, no deja de ser un problema de índole práctica. La situación era que llevaban un buen coche para dos personas. En aquel momento se lesionaron mis pequeñas neuronas. Yo es que soy incapaz de pensar mientras manejo. Ni siquiera puedo mirar hacia el radio y, por tanto, no tengo manos libres para escribir. La idea es que si mi cabeza no pensaba ya, mis rodillas tampoco. Sin embargo, a pesar de todo lo así evidente, me mandé una pregunta del carajo: – ¿Cómo hacemos para llevar a cuatro personas en este coche?A pesar de buscar entre cientos de posibilidades nos quedó la opción más sencilla: nos cogeríamos de las faldas de los sacos de dormir. Sin apenas darse cuenta, comenzaron a soltar faldas y nos cogimos a dos de ellas, con lo que quedaba una que estaba por el suelo, sobre la nieve. ¿Y si hiciera el amor con un saco de dormir? – ¡Coño! ¿Uh? ¿Cómo qué pasa? Para cualquier enfermo mental, el cara a cara con lo que se ve en la foto seguiría siendo un motivo más para pedir su ingreso inmediato.De ese modo salimos del pueblo y nos dirigimos rumbo a la Sierra Nevada. La nieve estaba nevando con mucha fuerza y además teníamos que hacer piloto automático porque había bastante hielo en la carretera. Bajar puntito de velocidad nos quedaba mal, así que en los momentos en que no había manera de avanzar más teníamos que frenar. Con la nieve caída parecía que el cielo cubre la Sierra Nevada con un gran cojín blanco y, estando ya muy cerca, llegamos a una altura en la que empezaron a verse las sierras nevadas y ese paisaje se agradece enormemente. Esas sierras te hacen pensar si es verdad lo que dicen de los árabes. No sé por qué, pero pensé que si tenían un poquito de influencia en alguna patochada del mundo le habría tocado a la nieve su turno.Así empieza otro sueño a seis manos. Al poco de iniciar el descenso nos detuvimos porque cambiamos entre mi hermana y yo los sitios porque se comunicó que, desde el asiento de atrás, podía pilotear bicicleta por la Sierra Nevada con bastante eficacia. A mitad del trayecto nos dimos cuenta de que la gente estaba un poco más rellena de lo normal pero los encontramos divertidísimos. Se nos había quedado lo mismo el primer refugio por el que pasamos, a pesar de que acabábamos de entrar en la Sierra Nevada con la nieve recién cayendo y llevábamos dos sacos de dormir para cuatro personas. ¿Para qué vamos a opinar si nos dan comida gratis?



No perdáis de vista que este texto lo ha generado una máquina a partir de una simple frase. Como podéis ver, aunque puede ser una buena base para escribir una historia, le faltan los retoques y el ajuste que por ahora solo un humano puede hacer. Por lo que no os preocupéis, Skynet queda todavía un poco lejos.

Os dejo ahora como quedaría la historia modificando algunas cosillas.


Historia generada por GPT-3 con algún retoque

Nuestra historia empezó en Sierra Nevada. Desde Granada se veía la nieve imponente intermitentemente iluminada por los rayos del Sol. Había que escaparse de Santa Fe, extirpar con urgencia el agujero negro en donde caíamos sin cesar y salir libres al sol de Sierra Nevada. Desde los primeros días que llegamos al pueblo a trabajar nos dio por ir a las montañas. Había empezado el invierno. En los primeros días de enero en algunos lugares ya había tres metros de nieve. Lo vimos como una buena opción para disfrutar de la naturaleza y cada vez que conseguíamos un par de días libres nos montábamos en el coche para salir a la montaña. En esta ocasión cuatro coches emprendieron la marcha en dirección al pueblo de Pampaneira, en las Alpujarras granadinas. Cuando llegamos, no era posible que todos los coches pudieran aparcar por la nieve, así que fuimos a buscar por otro camino alternativo al que tomaran los demás.

El resto, que si consiguió aparcar, estaban tan contentos, pensando que nos divertiríamos un montón. Las tres horas y media de viaje sonaban bien hasta que arreció el temporal de nieve y se desató el problema. Para los amantes de las rutas deportivas de alta dificultad, así como para corredores profesionales, no deja de ser un problema solo de índole práctica. La situación era que llevábamos un buen coche apto para circular por la nieve solo para dos personas. En aquel momento se lesionaron mis pequeñas neuronas. Yo es que soy incapaz de pensar mientras conduzco. Sin embargo, a pesar de la situación evidente en la que nos encontrábamos, me hice en voz alta la pregunta del carajo: – ¿Cómo hacemos para llevar a cuatro personas en este coche? A pesar de buscar entre cientos de posibilidades nos quedó la opción más sencilla: descenderíamos por la ladera nevada agarrados a los sacos de dormir. Sin apenas darnos cuenta, estábamos los dos deslizándonos a toda velocidad por la pendiente. El saco quedaría destrozado. Y yo que me lo había traído para poder hacer el amor con intimidad. – ¡Coño! ¿Uh? ¿Cómo? Para cualquier enfermo mental, la imagen que se proyectaba en mi mente como si de una foto real se tratara, seguiría siendo un motivo más para pedir su ingreso inmediato.

De ese modo tan expeditivo salimos de la montaña nevada y nos dirigimos rumbo al pueblo. La nieve caía con mucha fuerza y además teníamos que conducir muy despacio porque había bastante hielo en la carretera. Bajar un puntito de velocidad no era una opción, teníamos unas ganas locas de llegar a la casa rural.   Hasta que hubo un momento en el que no había manera de avanzar más y tuvimos que parar. Con la nieve caída parecía que el cielo cubre Sierra Nevada con un gran cojín blanco y, estando ya muy cerca de la casa rural, llegamos a una altura en la que empezaron a verse todos los picos nevados y ese paisaje se agradece enormemente. Esas sierras te hacen pensar si es verdad lo que dicen de los árabes. No sé por qué, pero pensé que si tenían un poquito de influencia en alguna patochada del mundo le habría tocado a la nieve su turno. Así empieza otro sueño sin sentido. Al poco de iniciar de nuevo el descenso nos detuvimos para intercambiarnos los sitios.


El siguiente reto es descubrir que usos reales podría tener y en que escenarios se podría crear un producto o servicio que incorpore estas capacidades cognitivas. Esta tecnología no encierra ningún peligro, pero sí que se tiene que aplicar con criterios éticos y siempre en favor de las personas. Seguiremos atentos a la evolución de este espectacular modelo de Deep Learning.