Filosofía

¿Lo binario como caverna o posibilidad?

Luego de estar muchos días y horas programando, mirando fijamente una pantalla, decido frenar y filosofar un rato, ¿qué es todo este código que estoy escribiendo? ¿En qué mundo estoy viviendo? ¿En el binario?

¿Es esta virtualidad una posibilidad más de la realidad? ¿Software y realidad forman parte de una enorme hiper-realidad? ¿Será lo virtual, algún día, nuestro principal mundo de vida?

Pienso en Platón, en el Mito de la Caverna, en Matrix, y decido escribir esto:

“Imagina un antro subterráneo… hombres encadenados desde la infancia, de suerte que no puedan mudar de lugar ni volver la cabeza a causa de las cadenas que les sujetan las piernas y cuello.” Así empieza el Mito de la Caverna que forma parte del libro VII de la República de Platón.

Detrás de estos prisioneros hay un muro con un pasillo. Por el pasillo circulan carceleros portando objetos. Utilizando una hoguera proyectan las sombras de dichos objetos en una pared que los prisioneros pueden ver. Los prisioneros creen que esas sombras son la realidad o el conocimiento verdadero; no pueden conocer nada más que esas sombras.

Un día, uno de estos prisioneros se libera y decide escapar; se arrastra penosamente por un túnel ascendente y logra salir de la caverna. Fuera de la cueva contempla una nueva realidad más auténtica y más bella.  

Mediante esta alegoría, Platón explica que hay dos mundos, el mundo sensible (el de las apariencias) y un mundo superior, el mundo de las ideas. Por lo tanto, la alegoría de la caverna detalla el proceso de elevación progresiva en el conocimiento humano. El filósofo platónico para “salir de la caverna” debe superar el ámbito de la opinión o doxa para acceder al ámbito del saber. El filósofo debe abandonar las falsas creencias, los prejuicios ligados a la costumbre; debe romper con su vida cómoda y confortable basada en el engaño. 

Finalmente el hombre libre regresa a la caverna para compartir sus conocimientos con los prisioneros (una especie Morfeo de Matrix), siente la necesidad de ayudarles a ascender al mundo real.

Morfeo y Neo escapan de la Matrix y se enfrentan con una dura visión: el mundo es un desierto apocalíptico dominado por las máquinas. No hay belleza en ese mundo; los humanos son esclavizados y viven atrapados en la caverna platónica creada por las máquinas. 

Me pregunto, ¿es justo destruir la realidad virtual de millones de personas para arrojarlas a un mundo peor en nombre de la Libertad? Neo, hacker y líder de la revolución humana, ¿es liberador o tirano?¿Existe una única posible realidad digna de ser vivida?

¿Qué pastilla elijo?

Antes me pregunto:

¿Es la libertad el mayor bien posible? ¿Acaso no somos también esclavos de las leyes físicas y la finitud temporal? Y en última instancia, yendo aún más lejos en este juego-experimento mental, tampoco sabemos a ciencia cierta si ahora mismo no somos prisioneros de un dios creador y devenimos día a día dentro de un simulacro tipo escape room existencial.

¿Es nuestra realidad monolítica o sólo es una versión más de lo posible? ¿Una comunidad virtual es, ontológicamente hablando, inferior a tomar cerveza con amigos en un bar?

A group of young British children watching television in October 1988. (Photo by Express/Getty Images)

Tal vez algún día nuestros sistemas operativos biológicos humanos y la realidad en la cual nos vemos obligados a estar inmersos, queden obsoletas. Tal vez el futuro de la Humanidad ya no está en este mundo sino dentro a una multi-realidad más amplia donde las posibilidades, las cavernas, los escapes de las cavernas, las cosmovisiones y las opciones vitales sean casi infinitas.

¿En cuál de todas las realidad será posible alcanzar el Bien Supremo para una vida plena? Es decir, dónde seremos capaces de alcanzar las mayores cuotas de virtud, felicidad y conocimiento. ¿Lo será en el mundo de siempre? Esclavos de lo biológico y de la cotidianidad más desesperante, ¿lo será en el mundo del código? Donde corremos riesgo de ser esclavos de las máquinas y las apariencias digitales.

Es posible que en esta hiper-realidad ya no seamos prisioneros de una caverna sino de miles de cavernas. Como las muñecas rusas, serán cavernas dentro de cavernas. Viviremos, tal vez, dentro de un video juego intentando escapar de una Matrix para acceder al siguiente nivel. Suena estimulante y claustrofóbico a la vez.

¿Mito, logos o binario?

Aún no sé qué pastilla tomar, ¿azul o roja? Tal vez las dos a la vez y ver qué pasa.

fundamentos de los computadores, programación, robótica

Sensores y actuadores: del mundo físico al eléctrico.

La electrónica es una herramienta muy versátil que nos permite hacer un montón de cosas; por ejemplo: tomar señales del mundo físico y llevarlas al mundo electrónico. Podemos procesar información, trabajar sobre esas señales que hemos adquirido y realizar acciones sobre el mundo físico. 

Los sensores y los actuadores:

  • Los sensores detectan formas de energía, como pueden ser luz o fuerza, y las convierten en una salida de información legible por un sistema electrónico.
  • Los actuadores también reciben una entrada y generan una salida, pero funcionan en sentido opuesto a un sensor. Un actuador es un transductor que recibe información y produce una salida, consistente en alguna forma de energía física.

Los sensores son los que nos permiten capturar señales del mundo físico; el procesador, que nos permite procesar estas señales y, luego, los actuadores, que nos permiten actuar sobre el mundo físico.

Sensores: son los que nos permiten adquirir señales y funcionan para diferentes variables: temperatura, presión, sonido, luz, distancia, aceleración, ángulo, señales eléctricas, gas, partículas, etcétera. Existe una infinidad de ellos.

Procesador: permite procesar información. Hay diversos tipos: analógicos, digitales. Dentro de los digitales, están programables o no programables.

Actuadores: nos permiten realizar acciones. Tenemos de diverso tipo, por ejemplo, sonido: un parlante. También existen de calor, por ejemplo, una estufa o una resistencia eléctrica.

La electricidad es crucial cuando queremos procesar información. Cuando pensamos en capturar, procesar o entregar señales, inevitablemente, pensamos en el uso de la electricidad

Ejemplos de sensores y actuadores:

  • Un micrófono convierte la energía acústica (vibraciones sonoras: oscilaciones en la presión del aire) en energía eléctrica (variaciones de voltaje). 
  • Un altavoz, sigue el camino contrario, transforma la corriente eléctrica en vibraciones sonoras. 
  • Una cámara digital, convierte la energía lumínica transportada por los fotones en corriente eléctrica. 
  • Una pantalla de ordenador sigue el camino inverso al anterior. Transforma la corriente eléctrica en energía lumínica a través de una matriz de puntos luminosos independientes. 
  • Un ventilador, convierte la energía eléctrica en energía mecánica (movimiento del aspa del ventilador).
  • Una estufa doméstica, transformando la energía eléctrica en térmica.

fundamentos de los computadores, programación

¿Qué es un microcontrolador?

Los microcontroladores son pequeñas computadoras. Se encuentran incrustados in timers, termostatos, juguetes, controles remotos, microondas, etc. Pueden ser programados para detectar y controlar actividad usando sensores y actuadores.

  • Los sensores detectan el mundo físico y convierten la energía en señales eléctricas.
  • Los actuadores actúan en el mundo físico, convierten la energía eléctrica en energía física como luces o movimiento.
  • Los microcontroladores escuchan a los sensores y hablan a los actuadores basándose en la programación.

El microcontrolador es como una mini-computadora; junto con la electrónica que construyamos, son el esqueleto de nuestros proyectos.

Aprender Arduino implica, por lo tanto, conocer las dos ramas involucradas dentro de la computación: programación y electrónica.

Pero Arduino es más que un microcontrolador, es una plataforma que integra software, hardware y documentación; si hay una característica a destacar de Arduino, es su carácter libre. Todo lo que hay alrededor de esta placa está pensado para facilitarnos la programación de un micro-controlador y el proceso de prototipado.

Las partes más importantes de la placa de Arduino:

Para entender mejor qué es la placa de Arduino:

Dentro de la propia placa podemos encontrar 7 partes fundamentales donde se encuentran no solo un microcontrolador, tenemos dos.

  1. Pines digitales: los pines son la ventana al mundo físico que tiene Arduino. Los pines digitales permiten conectar componentes digitales es decir, con dos estados HIGH o alto (correspondería con 5V) y LOW o bajo (correspondería con 0V).
  2. Botón reset: este botón nos permite reiniciar el programa que hemos cargado. Esto pondrá todas las variables y modos en el estado inicial que hayamos marcado en la función setup().
  3. Puerto USB: este puerto tiene dos funciones. Por un lado cargar el programa al microcontrolador y poder comunicarnos con la placa desde nuestro ordenador. Por otro lado nos permite alimentar los componentes de la placa con 5V.
  4. Microcontrolador: Arduino no es sólo un microcontrolador. Arduino es la placa de desarrollo que nos permite programar y prototipar de una manera muy sencilla. El micro-controlador es el cerebro de la placa. 
  5. Conector de alimentación: existen diferentes maneras de alimentar la placa de Arduino. Una de ellas es a través del conector jack de alimentación.
  6. Pines de alimentación: seguramente quieras conectar sensores y actuadores a la placa. Los pines de alimentación te permitirán alimentarlos con una tensión de 5V o 3,3V.
  7. Pines analógicos: si hemos visto que los pines digitales solo permiten leer dos estados, los pines analógicos permiten leer un rango de valores entre 0V y 5V.

Por lo tanto, un microcontrolador (MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora:

  • unidad central de procesamiento.
  • memoria.
  • periféricos de entrada y salida.
fundamentos de los computadores, programación

Fundamentos de computadores

Los computadores fueron desarrollados como una herramienta para agilizar la realización repetitiva de operaciones aritméticas y lógicas básicas; con el tiempo fueron ganando complejidad, tanto por el número de operaciones como por la complejidad propia de los cálculos.

Hoy en día, se han convertido en un elementos imprescindibles en todos los campos de la ciencia, de la comunicación y del ocio.

A pesar de los grandes cambios que han ido sufriendo las máquinas, el procesamiento de los datos dentro de un computador continúa basado en la realización de operaciones aritméticas y lógicas sencillas sobre datos que se encuentran en la memoria principal.

La información es codificada de manera adecuada para poder ser tratada por un procesador digital.

Las características de la tecnología con la que se construyen los computadores obligan a trabajar con sólo dos símbolos diferentes: el 0 y el 1.

Toda la información que tenga que procesar un computador se tendrá que codificar usando únicamente estos dos símbolos.

Estos son, pues, los puntos de partida:

  • Dentro de un computador toda la información se codifica como cadenas de ceros y unos.
  • Una cadena de ceros y unos no tiene sentido por ella misma. Hay que conocer la manera cómo se codifica la información, esto es el formato en que están codificados los datos.
  • El procesamiento que lleva a cabo un computador sobre las cadenas de ceros y unos consiste en operaciones aritméticas y lógicas sencillas.
fundamentos de los computadores, programación

Estructura general de un computador digital

Una computadora es un dispositivo construido con el propósito de manipular o transformar información para conseguir una información más elaborada, por ejemplo, el resultado de un problema determinado.

Una computadora digital trabaja con datos numéricos, codificados todos ellos en un sistema de numeración en base 2, es decir, basados en señales binarias; señales sobre las que podemos identificar solamente dos valores distintos.

Un computador digital dispone de una estructura organizada en módulos diferenciados, con tareas y funcionalidades bien definidas.

La estructura general de un computador digital es:

Datos de entrada + procesamiento = resultado (datos de salida)

Estructura general de un computador

Los dispositivos de entrada y los de salida constituyen elementos de conversión de la información entre el mundo analógico y el mundo digital.

El procesador está constituido por una unidad central de proceso (CPU, Central Process Unit) y una memoria íntimamente relacionada.

Arquitectura general de un procesador

La unidad central de proceso es la encargada de procesar los datos de acuerdo con el programa establecido, y se organiza en dos grandes bloques: la unidad de control y la unidad de proceso o camino de datos.

Estructura de una CPU
  • La unidad de proceso reúne los recursos de cálculo.
  • La unidad de control es la encargada de dar las órdenes en la secuencia correcta a la unidad de proceso para realizar las operaciones que establece el programa en ejecución.
fundamentos de los computadores, programación, robótica

¿Qué es la electrónica digital?

La electrónica digital o discreta es la electrónica basada en señales sobre las que sólo se identifica un conjunto finito de valores diferentes.

En contraposición, en la electrónica analógica las señales pueden variar de forma continua, es decir, no están reducidas a un conjunto de valores.

En una señal digital sólo se diferencia entre el valor alto de tensión y el valor bajo de tensión, por ejemplo 0 V y 5 V. En cambio, en una señal analógica se pueden registrar cualquier valor de tensión dentro de los márgenes de funcionamiento.

Las tecnologías actuales con las que se construyen los sistemas digitales trabajan especialmente bien cuando las señales se identifican con dos valores de tensión diferente.

Estos valores reciben denominaciones diferentes según el ámbito de trabajo, como verdadero y falso o bien 0 y 1 lógicos.

Trabajar directamente con información analógica resulta poco práctico si queremos procesar información digital en una computadora. Por lo tanto, hay que disponer de mecanismos para digitalizar la información, es decir, para codificarla utilizando sólo ceros y unos.

Las computadoras son sistemas digitales complejos. Entender y conocer las herramientas metodológicas para su diseño y síntesis nos abre el camino al desarrollo de sistemas digitales específicos. Los conceptos básicos del funcionamiento de las computadoras son conocimientos necesarios para aquel que quiera trabajar en el diseño de sistemas electrónicos, en la programación de los mismos o en el desarrollo de aplicaciones específicas que requieran cierto grado de optimización.

programación

Estructuras algorítmicas

En todo algoritmo aparecerán las siguientes partes:

  1. Encabezamiento: sirve para identificar dónde empieza la descripción de nuestro algoritmo y para darle un nombre.
  2. Definición de constantes: después del encabezamiento definiremos las constantes que utilizaremos en nuestro algoritmo. En caso de no utilizar constantes no aparecerán.
  3. Definición de tipos: definiremos los tipos de nuestras variables.
  4. Declaración de variables: diremos qué variables utilizaremos en nuestro algoritmo.
  5. Cuerpo del algoritmo: acciones que realizará.
  6. Final del algoritmo: nos sirve para tener en claro donde acaba el algoritmo.

La palabra clave algoritmo se pondrá siempre al principio de un algoritmo; y junto con el nombre del algoritmo conforma el encabezamiento. La palabra clave falgoritmo se pone una vez ya hemos descrito todas las acciones de nuestro algoritmo.

Las constantes siempre tienen que aparecer en medio de las palabras claves const y fconst. De forma que siempre que veamos estas palabras sabremos que todo lo que se encuentra en medio son definiciones de constantes.

Lo mismo sucede con las definiciones de tipos y las palabras clave tipo y ftipo; así como las declaraciones de variables y las palabras clave var y fvar.

programación

¿Qué significa especificar?

El primer paso en la construcción de algoritmos consiste en saber claramente qué es lo que queremos resolver, es decir, cuál es el problema que tenemos que solucionar.

Especificar: consiste en dar la información necesaria y suficiente para definir el problema que hay que resolver de la manera más clara, concisa y no ambigua posible.

Por lo tanto:

  • la especificación nos dice cuál es el problema que tenemos que resolver.
  • el algoritmo nos dice cómo resolvemos el problema.

En la especificación haremos una descripción de:

  • el estado inicial en que se encuentra el entorno y del cual partiremos (pre-condición).
  • el estado final del entorno al que debemos llegar para resolver el problema (post-condición).

Siguiendo el ejemplo de la lavadora, podríamos tener la siguiente pre-condición:

{Pre: la ropa está dentro de la lavadora y la lavadora está conectada al suministro de luz y de agua. Además el cajón destinado al jabón, está lleno de jabón}

Y podríamos tener una post-condición así:

{Post: la ropa que estaba dentro de la lavadora, continúa adentro, pero ahora está limpia}

Elementos de la especificación:

  1. declaración de variables.
  2. pre-condición
  3. nombre del algoritmo
  4. post-condición

Ejemplo de especificación:

Queremos especificar un algoritmo que intercambie los valores de dos variables. Nuestro entorno, por lo tanto, está construido por dos variables. La especificación resulta así:

x, y : entero

{Pre: x = X e y = Y} *

intercambiar

{Post: x = Y e y = X}

*En la especificación utilizamos la X y la Y mayúscula para designar el valor de las variables: x ,y debido a que el valor de las variables puede cambiar cuando se ejecuta el algoritmo. Por convención, siempre utilizaremos como nombre del valor inicial de una variable el nombre de la misma variable en mayúscula.

La especificación es un paso previo y necesario para diseñar algoritmos. La especificación también nos puede servir para recordar claramente qué hace nuestro algoritmo sin la necesidad de leer todo el código. Además de la especificación es recomendable añadir comentarios dentro del algoritmo. Los comentarios y la pre y post-condición se ponen entre llaves. Los comentarios aunque no formen parte del algoritmo propiamente dicho son importantes para hacer más comprensibles los algoritmos.

robótica

Programación en Arduino

Arduino es una plataforma electrónica de código abierto basada en hardware y software de fácil aprendizaje y utilización.

Las placas Arduino pueden leer entradas (por ejemplo: un dedo en un botón o un mensaje de Twitter) y convertirlo en salidas: activar un motor, encender un LED, etc.

Podemos, por lo tanto, decirle a nuestra placa qué hacer enviando un conjunto de instrucciones al micro-controlador. Para enviar estos mensajes se utiliza un lenguaje de programación y el software Arduino (IDE: Integrated Development Environment , es decir, Entorno de Desarrollo Integrado).

(Descargar IDE: https://www.arduino.cc/en/Main/Software)

Ejemplo: código para sensor y LED

Por lo tanto, al contrario de otras tecnologías como pueda ser un ratón o un teclado, Arduino no es un hardware que se conecte y listo. Requiere de un proceso de configuración y aprendizaje previo y una programación para el micro-controlador.

¿Qué es un IDE o entorno de desarrollo?

Existen muchos entornos de desarrollo para muchos lenguajes de programación. Son herramientas que nos permite programar  y de alguna manera son como procesador de textos. Para escribir un mensaje podemos trabajar con Word o con el Bloc de notas (que es más básico); la finalidad es la misma: escribir mensajes. El IDE de Arduino es algo parecido, la única diferencia es que tiene ciertas herramientas que nos permitirán cargar el programa al micro-controlador.

Con los años, Arduino ha sido el cerebro de miles de proyectos, desde objetos cotidianos hasta instrumentos científicos más complejos. Una comunidad mundial de creadores (estudiantes, aficionados, artistas, programadores y profesionales) se ha reunido en torno a esta plataforma de código abierto; sus contribuciones se han sumado a una increíble cantidad de conocimientos accesibles que puede ser de gran ayuda para principiantes y expertos.