MÓDULO 1: INTRODUCCIÓN

Unos conceptos básicos para comenzar

Programación en general: el mundo de los algoritmos

¿Qué es un Algoritmo? 

Un algoritmo es un conjunto de instrucciones estructuradas que tienen como objetivo resolver un problema. Los algoritmos están presentes en nuestra vida cotidiana en multiples campos, desde una receta de cocina que nos indica que ingredientes necesitamos, en que orden y como debemos prepararlos para obtener el plato deseado; pasando por las instrucciones de montage de un LEGO o un mueble de IKEA; una partitura musical, que indica que notas tocar para reproducir una determinada pieza, o una guía de color, que nos dice, que tenemos que mezclar azul y amarillo para obtener verde.

Estas instrucciones o algoritmos pueden representarse/implementarse utilizando diferentes lenguajes y estructuras (códigos de representación).

Por ejemplo:

- Mezclando azul y amarillo obtendremos verde. Si a ese verde le añadimos blanco sera verde claro, pero si le añadimos negro sera verde oscuro.


                                                 +blanco = verde claro

- Azul + Amarillo = Verde  <

                                                 +negro = verde oscuro


                                + [  ] = [  ] 

- [  ] + [  ] = [  ]  <

                                + [  ] = [  ] 

En computación, los programas son algoritmos escritos en un lenguaje especifico y comprensible para la máquina, ya que, es la maquina la que tiene que realizar esas acciones.

Al igual que en el ejemplo anterior, en el que hemos escrito con tres códigos de representación diferentes el algoritmo que resuelve el problema '¿cómo crear color verde?', en la programación pasa igual, y existen múltiples estructuras, lenguajes y entornos, que nos permitirán implementar el algoritmo que solucione nuestro problema.

Es muy importante tener siempre en mente que EN PROGRAMACIÓN NO HAY UN SOLO CAMINO CORRECTO :)
Programar es un proceso creativo y constructivo, en el que, de diferentes formas, se pueden obtener resultados equivalentes. Aunque siempre podrá haber diferencias en los costes, tanto de tiempo como de memoria.

Existen muchos lenguajes de programación diferentes y aunque unos y otros frecuentemente tienen elementos en común, cada lenguaje se rige por sus reglas específicas. Esto implica que un comando o elemento que funciona en un lenguaje puede no funcionar en otro, o funcionar de otra manera; por lo que tendremos que conocer y tener en cuenta, en cada caso, los códigos de representación del lenguaje y el entorno en el que estemos programando. 

En la Figura 1. vemos un ejemplo de cómo imprimir en 4 lenguajes diferentes la misma frase "Hello World":

image-1663574116990.pngFigura 1. "Hello World" en cuatro lenguajes diferentes (C, C++, Java, Python)


Ejercicio 1 : Busca 2 ejemplos de algoritmos en tu vida cotidiana y represéntalos con dos códigos diferentes.


¿Qué es la programación?

La programación informática, se refiere al proceso de construcción de estos grupos de instrucciones, para que sean procesadas por un ordenador o microcontrolador. La programación, se basa en flujos de datos que se almacenan, comprueban y transforman de manera estructurada. 

En un sistema computacional vamos a tener elementos de dos tipos: el software, que es la parte inmaterial, y el hardware, que es la parte material. 
El software, son los componentes lógicos ("Software", 2022), las instrucciones o algoritmos, es decir, los programas que serán seguidos por el hardware. El hardware, son los componentes físicos que constituyen el ordenador/computadora (disco duro, tarjeta gráfica, pantalla, ratón, altavoz, cámara ...). El software, le dice al ordenador lo que tiene que hacer, para lograr el resultado deseado. El software es el ADN de la máquina. No obstante, pese a que esta distinción está ampliamente extendida, en realidad, no está tan claro dónde debe situarse la línea que establece la diferencia entre hardware y software.

Lo que sí está claro es que esta combinación de hardware y software constituye el sistema, es decir, la infraestructura que permitirá que los datos introducidos en un programa, a los que se conocen como inputs/inlets/entrada, sean procesados, es decir, que sean comprobados, leídos, almacenados, modificados.

El resultado que este programa proporciona se conoce como output/outlet/salida. Esta terminología y estructura (entrada -> proceso -> salida), se aplica también, a los procesos internos de los programas, ya que, un programa está constituido por otros programas, que son, multiples procesos conectados e interrelacionados. 
Esta idea de entrada y salida de datos, nos va a acompañar durante todo el curso, ya que, en nuestros proyectos vamos a trabajar con un conjunto de datos de entrada, que nos permitirán obtener un resultado o salida. Generalmente, todo proceso tiene una entrada de datos (input), un procesamiento, durante el cual se realizan acciones con esos datos, y una salida de datos(output) que es el resultado del proceso. Programar es la acción de construir esos programas para ordenador (Scratch, 2022). 

Para explicar y hacer más comprensible cómo funcionan los algoritmos, suelen emplearse metáforas. Así, es posible establecer similitudes entre algo tan abstracto, como es la programación, con procesos que nos resultan más familiares. Vamos a tomar como metáfora los sistemas hidrográficos: ríos, arroyos, pozos, lagos, meandros, y las infraestructuras que el ser humano introduce en estos sistemas fluviales para modificar el curso y estado del agua: presas, centrales hidroeléctricas, sistemas de canalización para el riego, acueductos o simples marcas en la pared de un canal, para medir el nivel del agua y obtener información acerca del crecimiento de los ríos. 

image-1663575187664.jpgFigura 2. Mapa de embalses de la cuenca del Ebro.

Por ejemplo:

En Zaragoza el nivel del agua del rio se mide (Proceso 0: comparar) una vez todos los días (Proceso 1: contar) y se apunta en una libreta (Proceso 2: almacenar). Este nivel, ha de ser siempre superior a 50 (Proceso 3: comparar). Cuando el nivel de agua en Zaragoza, desciende por debajo de 50, se avisará al embalse (Proceso 4.1.1: enviar información) para que deje salir más agua (Proceso 4.1.2: cambiar), si el nivel de agua no ha bajado por debajo de 50, no se avisara al embalse y el agua que deja salir este, seguirá siendo la misma (Proceso 4.2: no cambiar). Nombre descriptivo de este programa: Comprobación del estado del agua en Zaragoza, y estado del embalse en función de esa comprobación.

El agua de este sistema hidrográfico va a ser como los datos. Y las infraestructuras introducidas por el ser humano para controlar estas aguas van a ser como los programas que haremos para procesaran estos datos. De esta manera, iremos encadenando procesos por los que los datos pasan para conseguir nuestro objetivo. 

Ejercicio 2: Identifica y etiqueta los diferentes procesos que conforman los algoritmos que has elegido para el ejercicio 1. Por etiqueta, nos referimos a que clasifiques estos procesos como en el ejemplo anterior, en función del tipo de acción que se realiza en cada proceso, utilizando categorías como comparar, almacenar o cualquier otra que se te ocurra. 


image-1660640818235.gifFigura 3. Un gráfico de un lenguaje de programación visual llamado "Bolt" en funcionamiento.

En la Figura 3. podemos ver un ejemplo animado de programación gráfica, que visualmente, se asemeja al mapa de la cuenca hidrográfica del Ebro de la Figura 2. Vemos cajitas conectadas por unas líneas, a través de las cuales, unas bolitas se desplazan de una caja a otra. Cada una de las cajitas representa un proceso, y las bolitas son los datos que entran por la parte izquierda de una cajita, en la cajita son procesados, y salen por la parte derecha en dirección a otra cajita. La dirección del desplazamiento de las bolitas, indica la dirección de los datos a través de estos procesos, que en este caso fluyen de izquierda a derecha, y es en este orden en el que se procesan.

image-1663580017716.gifFigura 4. Detalle de la figura 3. que muestra un mismo outlet puede alimentar los inlets de varios procesos (el mismo outlet de Time hace de input para Select, Add y Add) y un proceso puede tener varios inlets (Select tiene 3 inlets).

En la Figura 4, vemos que la salida de una sola cajita, puede estar conectada con las entradas de varias cajitas, ya que, el mismo resultado de un proceso puede alimentar varios procesos (Cajita Time). Y que, un proceso puede tener varios datos de entrada diferentes, que proceden de diferentes procesos previos (Cajita Select).

image-1663580148802.gifFigura 5. Detalle de la figura 3. que muestra que un proceso puede tener varios outlets.

Y aunque en la Figura 5, no haya ninguna cajita con más de una de sus salidas conectadas a otras cajitas, vemos que una cajita o un proceso puede tener varias salidas diferentes (Cajitas "Expose Color" y "Material Set Color"). Cada salida nos proporcionara distintos datos, que serán el resultado de un subproceso especifico llevado a cabo con los mismos datos de entrada. Por ejemplo la Cajita "Expose Color" toma como entrada un color y devuelve como salidas la cantidad de rojo (R), la cantidad de verde (G) y la cantidad de azul (B) que componen ese color.

Recordar, que cada lenguaje y entorno, tienen sus normas y por lo tanto el ejemplo de las Figuras 3, 4 y 5 también.


Diferencia entre datos e información


Un dato es una representación simbólica (numérica, alfabética, algorítmica, espacial, etc.) de un atributo o variable cuantitativa o cualitativa ("Dato", 2022), o sea: la descripción codificada de un hecho empírico, un suceso, una entidad (Equipo editorial, Etecé, 2021). 

Para que los datos tengan sentido para nosotros, han de ser puestos en contexto, por si solos no significan nada.

Ejemplo de datos:

(19,25), (2022), (54.3, 56.2, 54.1, 49.6, 52.9, 53.2, 52.6), (L, M, X, J, V, S, D), (septiembre)

(20,26), (2021), (56.1, 58.3, 59.2, 55.8, 54.7, 54.6, 55.5), (L, M, X, J, V, S, D), (septiembre) 

Arriba vemos varias listas de números y caracteres, son un conjunto de datos, pero somos incapaces de saber qué representan.

Poner estos datos en contexto con otros datos: relacionarlos, compararlos, en definitiva, procesarlos; nos permite entender, que relación existe entre los datos y los hechos, sucesos o entidades que representan. Al resultado comprensible del procesamiento y contextualización de datos es a lo que llamamos información.

Ejemplo de información:

Nivel del agua del río Ebro en Zaragoza en la semana del 19 al 25 de septiembre de 2022 fue: lunes 19: 54.3 cm; martes 20: 56.2 cm; miércoles 21: 54.1 cm; jueves 22: 49.6 cm; viernes 23: 52.9 cm; sábado 24: 53.2 cm; domingo 25: 52.6 cm

Nivel del agua del río Ebro en Zaragoza en la semana del 20 al 26 de septiembre de 2021 fue: lunes 20: 56.1 cm; martes 21: 58.3 cm; miércoles 22: 59.2 cm; jueves 23: 55.8 cm; viernes 24: 54.7 cm; sábado 25: 54.6 dm; domingo 26: 55.5 cm 

Tipos de datos

Numérico

Entero: Tipo de dato formado por una variable numérica que no cuenta con parte decimal ("Dato", 2020). En programación, vamos a conocer este tipo de dato como int (integer) 

Ejemplo int: dia del mes = 22


Real: Tipo de dato formado por una variable numérica que puede contar con parte decimal ("Dato", 2020). En programación, vamos a conocer este tipo de dato como float 

Ejemplo float: altura del agua = 49.6


Una variable de tipo float, siempre va a poder representar números enteros y decimales, sin embargo, una variable de tipo int, solo podrá representar números enteros.


Texto

Caracter: Tipo de dato formado por una unidad o símbolo que puede ser una letra, un número, una mayúscula o un signo de puntuación. En programación, vamos a conocer este tipo de dato como char (character).

Ejemplo char:  dia de la semana = J

Cadena: Tipo de dato formado por un conjunto de caracteres dispuestos de forma consecutiva que se representa entre comillas. En programación, vamos a conocer este tipo de dato como string.

Ejemplo string:  nombre del mes del año = "septiembre"

Una variable de tipo texto, tanto carácter como cadena, también puede representar números enteros y decimales, sin embargo estos serán entendidos por el programa como datos textuales, no como datos numéricos.



Lógico

Boolean: Tipo de dato que puede representar dos valores: verdadero o falso. 

Ejemplo boolean:  El jueves 22 de 2022 el nivel del agua del rio Ebro en Zaragoza supera los 50 cm = Falso


Ejercicio 3: Identifica y separa los datos de la información que has incluido en los algoritmos que has elegido para el ejercicio 1. Una vez tengas los datos separados, indica que tipo de datos son en tu algoritmo.


Figuras:

Figura 1: Tomada de "Hello World in Python | Python Program to Print Hello World" por FACE prep https://dev.faceprep.in/python/hello-world-in-python/

 Figura 2: Tomada de "Mapas Temáticos" por Confederación Hidrográfica del Ebro https://www.chebro.es/ca/mapas-tematicos 

Figura 3: Tomada de "Visualize that! Behind the scenes with Bolt for Visual Scripting" por Unity bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting

Figura 4: Tomada y recortada de "Visualize that! Behind the scenes with Bolt for Visual Scripting" por Unity bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting

Figura 5: Tomada y recortada de "Visualize that! Behind the scenes with Bolt for Visual Scripting" por Unity bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting

Referencias:

Dato. (2020, octubre 1). Equipo editorial, Etecé (Ed.),  En Enciclopedia Concepto. Consultado el 19 septiembre 2022 en https://concepto.de/dato/ 

Dato. (2022, Septienbre 2) En Wikipedia. https://es.wikipedia.org/wiki/Dato 

Dato en informática. (2021, agosto 5). Equipo editorial, Etecé (Ed.), En Enciclopedia Concepto. Consultado el 19 septiembre 2022 en https://concepto.de/dato-en-informatica/ 

Pure Data (2022). Pure Data home. [Website/Pagina web] Pure Data. Consultado el 16 Agosto 2022 en http://puredata.info/

Scratch (n.d). Programming. Scratch wiki. Retrieved August 17, 2022 https://en.scratch-wiki.info/wiki/Programming 

Software. (2022, Agosto 15). In Wikipedia. https://es.wikipedia.org/wiki/Software


Práctica 0: Programación Textual y Programación Visual

En este curso está claro que vamos a tener que programar, pero primero vamos a ver qué dos tipos distintos de programación emplearemos: la programación textual y la programación visual. 

Algo común a ambas tipologías es que la estructura de estos programas suele representarse con lo que se conoce como diagrama de flujo. Con él, es posible representar los diferentes caminos que puede tomar nuestro algoritmo dependiendo de que se cumplan o no las condiciones que incluyamos.

Cuando queramos crear un programa, nos va ser muy útil para definir su estructura, realizar un diagrama de flujo antes de empezar a programar en el ordenador. Podemos hacerlo con papel y boli.

En él vamos representar con el lenguaje que queramos, ya que somos nosotros quienes lo vamos a leer, todos los pasos necesarios para resolver nuestro problema y cómo los resultados de cada paso se conectan con otros pasos o procesos.  

image-1663425463444.37.29.pngFigura 1. Estructura de un diagrama de flujo. 


Elementos del diagrama de flujo

Un diagrama de flujo está formado fundamentalmente por los siguientes elementos:

image-1654535499072.png

image-1654535632765.png

image-1654535451517.png

image-1654535421186.png

image-1654535543002.png


Vamos a hacer un diagrama de flujo del ejemplo que vimos en Programación en genera... | Librería CATEDU en el que había que controlar el nivel del agua del Ebro en Zaragoza:

image-1668949950812.png

Figura 2. Diagrama de flujo del control del nivel del agua del río Ebro en Zaragoza.



Práctica 0: Diagramas de flujo de nuestros algoritmos

Ejercicio 4: Crea los diagramas de flujo correspondientes a los algoritmos que has hecho en los ejercicios del capítulo anterior. Utiliza una cajita para representar cada proceso. Incluye un proceso condicional en al menos uno de los diagramas. Si no queréis utilizar papel y boli podéis utilizar esta herramienta para crear tus diagramas: diagrams.net

Programación textual 

Una definición sencilla de este tipo de programación nos viene dada en el propio concepto que queremos definir: programación basada en texto. Para programar de esta manera es necesario que escribamos las palabras, como si componemos un texto literario, solo que la sintaxis y la gramática van a ser distintas... bastante distintas en algunos casos.

Para empezar, casi todos los lenguajes de programación están basado en el inglés. Así que, tener unas nociones de inglés nos va a venir de maravilla si queremos tener las cosas algo más fáciles cuando empezamos a programar. Si no, siempre podemos buscar el significado de esas palabras y las iremos aprendiendo. Muchos de los ejemplos y de la información que nos encontraremos en internet también estarán en inglés, aunque existen hispanohablantes que también comparten sus proyectos en español. 

Volviendo a la programación textual en sí, hay que mencionar que esta surgió antes que la visual, pero no vamos a entrar aquí a trazar una historia de los lenguajes de programación... Vamos a pasar a citar algunos ejemplos de programación textual dentro del mundo del arte y la educación.


Arduino

Este lenguaje de programación está basado en C++, que a su vez está basado en C. Y es que, aunque existen miles de lenguajes de programación, muchos de ellos están basados en lenguajes preexistentes, con algunas modificaciones que los mejoran para determinados usos. Sobre todo aquellos creados en el área de la educación y el arte, ya que tratan de simplificar estructuras y procesos.

Processing

Basado en Java, este lenguaje de programación se creó originalmente para facilitar que los artistas y diseñadores pudiesen crear con facilidad imágenes bastante potentes visualmente generadas por ordenador y en movimiento, e incluso añadirles interactividad. Desde hace más de 20 años la comunidad de Processing ha ido creciendo y se mantiene como un lenguaje de referencia a la hora de enseñar a programar dentro del mundo del arte y el diseño.

Aquí puedes ver algunos ejemplos.

p5.js

Este lenguaje es el que más recientemente ha surgido de los tres. Está basado en Javascript y la diferencia que presenta frente a los tres es que se diseñó para ser ejecutado directamente en el navegador, de ahí que está basado en Javascript. Como puedes leer en su página web, surgió como una adaptación de Processing para la web, por lo que su propósito principal es facilitar la creación de elementos visuales interactivos a artistas, diseñadores, educadores, etc.  En la siguiente captura puedes ver el área de trabajo y si conoces Processing te darás cuanta de que ambas son muy similares:

image-1663601072253.24.21.pngFigura 3. Imagen de un programa de p5.



Programación visual

¿Qué es?

image-1660640818235.gifFigura 4. Programa en un lenguaje de programación visual llamado "Bolt" en funcionamiento.

La programación grafica (VPL Visual programing languages) nos permite crear estas estructuras para comprobar y transformar datos de manera visual en 2D (dos dimensiones) o incluso 3D (tres dimensiones).

Frecuentemente en este lenguaje de programación nos vamos a encontrar con cajitas o formas que vamos a poder conectar unas con otras. Cada cajita o forma va a realizar una función muy específica. Por ejemplo una cajita que detecta cuando pulsamos la tecla "A". Es la combinación de estas cajitas sencillas lo que nos va a permitir crear estructuras que realicen tareas más complejas, por ejemplo, enviar un mensaje cuando el ratón hace click en un elemento determinado.

Las cajitas por lo general van a tener entradas y salidas. Por esas entradas, llamadas también inlets o inputs, llegarán datos a la cajita, en la cajita se procesarán esos datos y a traves de sus salidas, llamadas también outlets u outputs, se enviarán los datos resultantes del proceso que ha realizado la cajita.

Por ejemplo, la cajita exprimidor saca por su salida zumo de limon cuando entran 4 limones, si en vez de limones entran 3 naranjas sacara por su salida zumo de naranja.

Figura 5. La cajita exprimidor.


Vamos a ver algunos ejemplos de lenguajes de programación visual de diferentes épocas (Nakashima, 2018):

Pygmalion (1975)

Uno de los primeros intentos de mejorar los procesos de programación. Fijándose en cómo se comunicaban y como pensaban las personas, se desarrolla con el objetivo de construir un entorno que facilitara la comunicación y estimulara el pensamiento creativo (Instadeq Blog, 2022).

image-1669136727134.jpg Figura 6. Imagen del programa Pygmalion.


¿Algunos de estos lenguajes de programación visual se parecen un poco a los diagramas de flujo, ¿no?


Agentsheets (1983)

Si, la programación visual puede parecer el mapa de un videojuego, y utilizar representaciones puramente visuales como veis en la figura 7.

image-1669137811203.pngFigura 7. Imagen del programa Agentsheets.


Scratch

Es un lenguaje desarrollado por el MIT Media Lab en 2002 creado para niños. https://scratch.mit.edu/ 

image-1669135002186.webp

Figura 8. Hello world (Hola Mundo) en el lenguaje de programación visual "Scratch".

vvvv

Creado para facilitar el desarrollo en grandes entornos multimedia, destaca su capacidad para generar gráficos en tiempo real. https://vvvv.org/ 

Cuando decimos que un programa trabaja en tiempo real quiere decir que el resultado que ofrece el programa se está procesando en este mismo instante. A medida que se van procesando los datos, se va emitiendo el resultado de ese proceso. 

image-1669138477157.jpgFigura 9. patch en vvvv (izquierda) y el resultado visual de ese patch (derecha).


Blender

En Blender, que es uno de los programas de 3D más potentes, podemos crear materiales utilizando un sistema de nodos o cajitas. https://www.blender.org/ 

image-1669139050005.gif

Figura 10. Edición de materiales en Blender utilizando programación visual.  

Pure Data

Pd es un entorno de código abierto de programación gráfica en tiempo real para audio, video y procesamiento gráfico (imágenes) (Pure Data, 2022). ¡Este va a ser el programa que aprenderemos en este taller! https://puredata.info/ 


image-1669141557235.gifFigura 11. Imagen de un programa en Pure Data.



Referencias:

Instadeq Blog: No-code Data Analysis & Interactive Visualizations (2022, febrero 21) No-code History: Pygmalion (1975). https://instadeq.com/blog/posts/no-code-history-pygmalion-1975/ 

Nakashima, E. (2018, May 12-13) Whoa, pictures! A visual history of visual programming languages! [Conference session] !!Con 2018, New York, United States. https://www.youtube.com/watch?v=mU1aPvvQbqk 

Pure Data (2022). Pure Data home. Pure Data. Consultado el 16 Agosto 2022 de http://puredata.info/


Programación textual: https://formacion.intef.es/catalogo/mod/book/view.php?id=69&chapterid=330
p5.js: https://p5js.org/es/
Processing: https://processing.org/
Elementos del diagrama de flujo: https://libros.catedu.es/books/fundamentos-de-programacion-estructurada-con-pseint-y-scratch/page/diagramas-de-flujo


Figuras:

Figura 1. Estructura de un diagrama de flujo. https://c.pxhere.com/photos/cc/97/mark_marker_hand_leave_production_planning_control_organizational_structure_work_process-774947.jpg!d 

Figura 2. Diagrama de flujo del control del nivel del agua del río Ebro en Zaragoza.

Figura 3. Imagen de un programa de p5.js.: https://editor.p5js.org/ 

Figura 4. Programa en un lenguaje de programación visual llamado "Bolt" en funcionamiento. bloghttps://blog.unity.com/games/visualize-that-behind-the-scenes-with-bolt-for-visual-scripting

Figura 5. La cajita exprimidor. https://giphy.com/gifs/hulu-snl-saturday-night-live-nbc-3o7TKPdUkkbCAVqWk0 

Figura 6. Imagen del programa Pygmalion. https://danhalbert.org/pbe-html.htm 

Figura 7. Imagen del programa Agentsheets. https://www.researchgate.net/figure/AgentSheets-Graphical-Rewrite-Rule-Double-clicking-an-agent-would-create-a-local-copy-of_fig13_320445800 

Figura 8. Hello world (Hola Mundo) en el lenguaje de programación visual "Scratch". https://anthsperanza.com/2018/05/01/scratch-educator-guide/ 

Figura 9. patch en vvvv (izquierda) y el resultado visual de ese patch (derecha). https://i.ytimg.com/vi/XTVBdWnsxk0/maxresdefault.jpg 

Figura 10. Edición de materiales en Blender utilizando programación visual. https://forum.sketchfab.com/uploads/db4890/original/3X/c/e/ceda7cef9f1de189fc38901b360916dd8ae182f4.gif

Figura 11. Imagen de un programa en Pure Data. https://blog.bela.io/images/mct-masters-part-1/hyperguitar_pitch.gif 

Elementos que debemos conocer

Antes de comenzar a programar, es importante que conozcamos una serie de elementos que nos van a acompañar durante este curso. Ahora puede abrumarnos y parecernos mucha información, pero este apartado y el siguiente que trata sobre estructuras está pensado para que puedas volver a consultarlo a lo largo del curso.

1. Comentarios...

En algunos de nuestros algoritmos/programas, puede que se vea muy claro qué hace cada parte, pero en otras ocasiones no es tan fácil saberlo. Por ello, los comentarios van a ayudar a que otros programadores que tengan acceso a nuestro código puedan comprenderlo más fácilmente, e incluso nosotros mismos. Imagina que has escrito un algoritmo en 2007, te olvidas de él y lo vuelves a abrir en 2032. Probablemente, en un primer momento no sepas de qué va, ni para qué lo escribiste, pero si en 2007 escribiste comentarios, te habrá ahorrado mucho tiempo al abrirlo 25 años después. 

Estos comentarios contienen información dirigida a las personas, son notas que tomaréis para vosotros mismos relacionadas con el funcionamiento del programa que estéis construyendo, o notas para facilitar a otras personas la comprensión del algoritmo que habéis creado. Son muy útiles para escribir recordatorios o explicaciones durante el proceso de trabajo y para etiquetar las diferentes partes de las estructuras que hagáis.


...en Arduino

Vamos a echarle un vistazo a la siguiente imagen:

image-1663586136115.15.23.pngFigura 1. Imagen de un sketch de Arduino

Esto es lo primero que veremos cuando tengamos instalado Arduino. Por defecto, al abrir la aplicación aparecen ciertas palabras escritas. En azul y verde vemos void setup() y void loop(). De ambas nos ocuparemos en el siguiente apartado sobre funciones.

Ahora, lo que nos interesa son las líneas que aparecen // entre los corchetes de ambas funciones. ¿Qué es importante aquí? Que esas indicaciones no van destinadas a nuestro ordenador, sino al programador. Se trata de comentarios. 

Cuando nuestros comentarios solamente ocupen una línea los escribiremos tras //. Como puedes comprobar, su color es gris claro, eso nos indica que Arduino hará caso omiso de ellos. Habrá momentos en los que necesitemos escribir comentarios más extensos y para ellos los escribiremos entre  /**/.

Ejemplo: /*Esto es un comentario
que ocupa más de una línea. */

...en Pure Data

En Pure data vamos a tener cajitas para las distintas funciones con entradas y salidas para los datos. Los comentarios visualmente no aparecen en ninguna cajita ni tienen entradas/inputs ni salidas/outputs. El texto introducido en los comentarios es información que no sera interpretada por la maquina como elementos transformadores del programa/patch que estamos construyendo.

image-1668513767343.PNGFigura 2. Un comentario en Pure data cuando esta recién creado.


2. Funciones...

Una función es un fragmento de código, un subalgoritmo dentro de nuestro algoritmo, que tiene como propósito resolver una tarea determinada.

Por ejemplo, si nuestro algoritmo es hacer un bizcocho, que consta de una serie de pasos como: comprar los ingredientes, batir los huevos, añadir el azucar, etc. Una función podría ser la que se encarga del paso 'batir los huevos' y la descompondríamos en : 1. coger los huevos, 2.romperlos y echarlos en un plato, 3. coger un tenedor, 4. batirlos.

... en Arduino

Como hemos visto en el apartado anterior, a parte de los comentarios había unas palabras a color: void setup() y void loop()

Bueno, la estructura sería esta.

void setup() {
// aquí escribimos los comandos a ejecutar
}

Es muy importante que no olvidemos ningún paréntesis ni corchete, o el programa no funcionará.

Ambas son funciones. Y, ¿qué es una función dentro del mundo de Arduino? Como ya hemos dicho, una función es un fragmento de código, un subalgoritmo dentro de nuestro algoritmo, que tiene como propósito resolver una tarea específica.


La palabra void, significa que esta función no nos devuelve ningún valor (sea un número, un caracter, un string, etc.) y la palabra reservada setup indica que el código que escribamos entre las llaves {} se ejecutará una sola vez al inicio del programa. Tanto setup como loop son palabras reservadas, pero eso lo veremos un poco más abajo.

En Arduino existen muchas funciones ya programadas, pero a parte de eso, podemos programar nuestras propias funciones.

Tienes una lista completa con las funciones que podemos encontrar en Arduino, aquí.


... en Pure Data

En pure data las funciones serán los objetos, que son cajitas en las que escribiremos el nombre de la función. Cada objeto va a realizar una función específica. La cajita con "+13" que vemos debajo cumple la función de sumar 13 a cualquier numero que entre en la cajita.

image-1669149047611.png

Una metáfora de una función que ya hemos visto en la Práctica 0: Programaci... | Librería CATEDU sería la cajita exprimidor. 

Figura 3. La cajita exprimidor.


3. Variables y palabras reservadas

... en Arduino

No podemos avanzar mucho más sin hablar de ellas, las variables. Ellas nos van a permitir almacenar valores en nuestros programas, para ello debemos que saber que podemos almacenar datos de distintos tipos.

Palabras como int, for, void loop() o if se consideran palabras reservadas porque poseen un significado especial dentro del lenguaje de programación que estamos empleando. Una manera de identificar a estas palabras especiales es porque aparecen con un color diferente.


Palabras reservadas para tipos de datos

Estas palabras tienen diferentes objetivos. Uno de ellos es para denotar los tipos de datos que podemos usar en nuestros programas. A estas palabras se les conoce como tipos predefinidos,  las escribimos delante de aquellas variables que vamos a emplear en nuestro programa y algunas de ellas son:

int: almacena un número entero de un tamaño máximo de 16 bits.
float: almacena un número decimal de 32 bits.
char: almacena un caracter.
boolean: almacena el valor verdadero (TRUE) o falso (FALSE).
long: almacena el valor de un número entero de 32 bits.

Por ejemplo podemos crear una variable que almacene el valor numérico que obtengamos con un sensor. Podríamos crearla así:

int valorSensorTemperatura = 0;

Lo que haría que el valor de esa variable inicialmente sea cero, siendo modificado cuando lo asignemos al pin de nuestro Arduino al que hemos conectado el sensor. Como vemos, la palabra reservada sería int, mientras que valorSensorTemperatura es el nombre de la variable. Ese nombre lo usaremos en nuestro programa cada vez que queramos usar o modificar su valor.

Palabras reservadas para funciones

Como ya hemos visto, existe una serie de funciones que ya vienen preprogramadas y que podemos utilizar directamente. Las dos fundamentales son void setup() y void loop(), pero existen muchas otras.

Algunas de ellas son:
delay(): detiene el programa durante el tiempo indicado (en milisegundos).
random(): genera números pseudoaleatorios.
float(): convierte un número, por ejemplo del tipo int, a un número decimal.

 

... en Pure Data

Las palabras reservadas en Pure Data serán aquellas que generalmente vamos a escribir dentro de una cajita de tipo objeto y que van determinar la función de esa cajita. Como por ejemplo la palabra "metro" que crea un objeto que envía señales periódicas cada X tiempo o la palabra "delay" que detendrá momentáneamente o retrasara el flujo que pase por ella.

metro.png


delay.PNG

 


4. Consola

La consola nos va a permitir saber el estado de nuestro algoritmo. En ella vamos a poder leer información referente a los diferentes pasos que nuestro algoritmo siga mientras es procesado. Es muy útil para detectar errores (bugs).


... en Arduino

En este caso, la consola nos va a permitir saber el estado de las conexiones con nuestro Arduino. Nos informará de si nuestro programa contiene algún error, si ha sido subido correctamente a nuestro Arduino o si ha habido algún problema.  La podemos ver rodeada en color rojo en la siguiente imagen:

image-1663662837011.pngFigura 4. Sketch de Arduino con la zona correspondiente a la consola marcada en rojo


...en Pure Data

La ventana principal se abre cuando ejecutamos Pd y tiene esta apariencia:

image-1663059064619.jpgFigura 5. Ventana principal de Pure Data.

En la parte inferior tenemos un espacio para la impresión de contenido desde patches de Pd y/o mensajes del propio Pd, esta es la consola. Para imprimir desde un patch utilizaremos principalmente el objeto "print".
Este objeto es útil para visualizar el estado de los datos en diferentes partes de la estructura/programa que creemos, nos va a ayudar a encontrar errores y a entender mejor cómo funciona nuestro programa.

Los mensajes que Pd envíe aparecen en la consola y nos dan información acerca de errores y procesos que realiza el programa. El botón de "Log" nos permite filtrar la cantidad de mensajes enviados por Pd que queremos ver en ese espacio. Siendo "0 fatal" la mínima cantidad de información mostrada y "4 todo" la máxima. Inicialmente vamos a tener el Log en "2 normal" y ampliaremos la información mostrada en función de nuestras necesidades a la hora de resolver posibles problemas.  

image-1661613340653.gifFigura 6. Ventana principal de Pure data (izquierda) y un patch/programa de Pure data (derecha).


REFERENCIAS:

Cerrada Somolinos, J. A., & Collado Machuca, M. E. (2015). Fundamentos de programación. Editorial Universitaria Ramón Areces : UNED.

Figuras:

Figura 1. Captura de pantalla de la IDE de Arduino

Figura 2. Un comentario en Pure data cuando esta recién creado.

Figura 3. La cajita exprimidor. https://giphy.com/gifs/hulu-snl-saturday-night-live-nbc-3o7TKPdUkkbCAVqWk0  

Figura 4. Captura de pantalla de la IDE de Arduino

Figura 5. Ventana principal de Pure Data.

Figura 6. Ventana principal de Pure data (izquierda) y un patch/programa de Pure data (derecha).

Estructuras que debemos conocer


0. Contadores

Esta sencilla estructura nos va a permitir contar eventos o sucesos. Esto nos permitirá, con ayuda de los condicionales e iteradores, tomar decisiones en función de cuántas veces haya sucedido un evento.  

Importante: en el mundo de la informática normalmente se empieza a contar por el numero 0. Luego en una lista de 8 elementos, el primer elemento ocupara la posición 0 y el octavo elemento la posición 7.

El ejemplo más sencillo y básico de contador consiste en crear una variable dentro del proceso a contar y sumarle a esta variable 1 cada vez que se ejecute el proceso. Asignaremos como valor de partida el número 0. Y cada vez que el proceso se ejecute, se sumará 1 a esa variable.

Una variable es un objeto que almacenará un valor, ese valor podrá modificarse a lo largo del programa. Por ejemplo, int i = 0 traducido a nuestro idioma sería: 'la variable "i" pertenece al tipo número entero y tiene el valor 0'.

Por lo general en un contador, la variable que creemos será del tipo integer, abreviado int –ya habíamos hablado de tipos de datos en este apartado–, ya que para contar nos conviene utilizar números enteros. En los lenguajes de programación textual, tradicionalmente, se utiliza la letra "i" para nombrar las variables contador, pero se puede utilizar la letra o nombre que queráis y si tenéis varias variables tendréis que utilizar nombres diferentes para cada una de ellas.

int i=0;
int i = i+1;

Que significa: "El entero i va a tomar el valor de si mismo más uno."
Eso se traduce en que i pasará a valer 0 + 1 = 1.

Vamos a ver ahora un ejemplo de que pasaría en cada repetición de un programa en el que la variable contador se incrementa 1 unidad: 

Antes del Arranque del programa: Variable contador = 0

Arranque del programa:

Inicio del proceso: (Incrementar en 1 unidad el valor de la variable contador: Variable contador = Variable contador + 1)

Variable contador = 0 + 1

Fin del proceso. Al terminar este proceso el valor de la Variable contador es 1.

Si lo repetimos una segunda vez, tenemos:

Inicio del proceso: (Incrementar en 1 unidad el valor de la variable contador: Variable contador = Variable contador + 1)

Variable contador = 1 + 1

Fin del proceso. Al terminar este proceso el valor de la Variable contador es 2.

Si lo repetimos una tercera vez, tenemos:

Inicio del proceso: (Incrementar en 1 unidad el valor de la variable contador: Variable contador = Variable contador + 1)

Variable contador = 2 + 1

Fin del proceso. Al terminar este proceso el valor de la Variable contador es 3.

Cuarta repetición:

Inicio del proceso: (Incrementar en 1 unidad el valor de la variable contador: Variable contador = Variable contador + 1)

Variable contador = 3 + 1

Fin del proceso. Al terminar este proceso el valor de la Variable contador es 4

...

Cada vez que se ejecuta el proceso se le suma 1 al resultado del proceso anterior. Si el proceso se ejecuta 8 veces el valor de la Variable contador tra esas repeticiones sera 8. 

Ejercicio 5: ¿Qué valor tendría la variable contador después de que el proceso se ejecute 8 veces si en cada proceso sumamos 2 en lugar de uno. Variable contador = Variable contador +2?

Ejercicio 6: Y, ¿si el proceso se realiza 15 veces y la cantidad sumada en cada proceso es 3? Variable contador= Variable contador + 3?


1. Condicionales (if-else-else if)...


Estas estructuras se encargan de controlar qué acciones de nuestro algoritmo van a ejecutarse y cuáles no. Solo hay dos opciones, o bien se cumplirán las condiciones, o no.

En ejemplo del control del nivel del agua en Zaragoza tenemos un claro condicional:

Condición, acción si la condición se cumple, acción si la condición no se cumple

En Zaragoza el nivel del agua del rio se mide una vez (Proceso 0: contar) todos los días (Proceso 1: comparar) y se apunta en una libreta (Proceso 2: almacenar). Este nivel, ha de ser siempre superior a 50 (Proceso 3: comparar). Cuando el nivel de agua en Zaragoza desciende por debajo de 50, se avisará al embalse (Proceso 4.1.1: enviar información) para que deje salir más agua (Proceso 4.1.2: cambiar), si el nivel de agua no ha bajado por debajo de 50, no se avisara al embalse y el agua que deja salir este, seguirá siendo la misma (Proceso 4.2: no cambiar). 



image-1669194900688.pngFigura 1. Condicionales marcados en el diagrama de flujo del control del nivel del agua del río Ebro en Zaragoza.

En los lenguajes de programación visual esta estructura se va a construir de manera diferente a en los lenguajes de programación textual.


En Arduino ...

Las palabras clave de esta estructura son:

IF - ELSE

IF: A esta palabra le seguirá la condición que deberá cumplirse para ejecutar una serie de acciones.
ELSE:
irá seguida de las acciones que se ejecutarán en caso de que la condición no se cumpla.


Un ejemplo para verlo en acción

No hay mejor manera para entender algo que ver una demostración de su uso. Para ello, vamos a recurrir a uno de los ejemplos que nos brinda la IDE (Integrated Development Environment, el lugar en el que vamos a escribir nuestros programas) de Arduino. Este ejemplo podemos encontrarlo dentro de:

Archivo > Ejemplos > 01. Basics > Fade

Aunque, como de momento no hemos instalado Arduino en nuestro ordenador, simplemente échale un vistazo al código de la siguiente imagen:

image-1663585519129.02.57.pngFigura 2. Imagen de la IDE de Arduino

En este ejemplo, lo que hacemos es aumentar y disminuir la luminosidad de un LED de manera progresiva.

De este ejemplo, por el momento, vamos a ver concretamente la parte relacionada con el condicional. En este algoritmo, el condicional aparece en las siguientes líneas.

En estas líneas encontramos la palabra reservada if seguida de dos condiciones encerradas entre paréntesis. Lo que traducido a español significaría: "Si el brillo es menor o igual que cero o el brillo es mayor o igual que 255". La disyunción nos viene dada por el operador lógico OR que para Arduino se traduce como ||. Otros operadores lógicos muy comunes son AND, que se traduce por && y NOT, que se escribe !.

Entre corchetes { } encontramos la acción a realizar. En este caso, revertir la cantidad de brillo que emitirá nuestro LED: si lo hemos apagado, lo comenzaremos a encender y al revés, si lo hemos encendido completamente, comenzaremos a apagarlo.
En este caso, no existe una acción que deba ejecutarse en caso de que no se de alguna de las dos circunstancias encerradas en el condicional, pero si la hubiese aparecería detrás de la palabra else.

Por tanto, un esquema de la estructura de los condicionales sería:

if (Condición) {
    Acción A
} else {
    Acción B
}

Siendo posible también:
if (Condición) {
    Acción
}

Una última palabra sobre los condicionales: else if

Existe también la posibilidad de que tengamos que realizar selecciones que den lugar a más de dos posibilidades, como por ejemplo en el caso que estemos leyendo ciertos valores de un sensor y queramos que un actuador realice diferentes acciones dependiendo de ellos.

Si el sensor recibe valores entre 0 y 255 --> Acción A
Si el sensor recibe valores entre 256 y 511 --> Acción B
Si el sensor recibe valores entre 512 y 1024 --> Acción C

Para ello necesitaremos las palabras else if, las cuales indican una segunda condición, o sucesivas.

La estructura sería la siguiente:

if (Condición 1) {
    Acción A
} else if (Condición 2) {
    Acción B
} else{
    Acción C
}

Puede parecer algo lioso en un primer momento, pero conforme avancemos y veamos ejemplos, te familiarizarás con estas estructuras.

En Pure Data ...

En Pure Data que es el lenguaje visual que vamos a aprender en este curso se pueden crear estructuras condicionales utilizando diferentes objetos, por ejemplo algunos objetos operadores, el objeto "select" o el objeto "spigot" que es una puerta que se abre y deja pasar datos o se cierra y no los deja pasar. Veremos más adelante como construir estas estructuras, de momento es importante que comprendáis la lógica del condicional.

image-1669195611722.PNGFigura 3. operadores de pure data que nos van a permitir comparar valores o caracteres. Cuando la comparación se cumpla enviaran un 1 por su salida, si no se cumple, enviaran un 0.

image-1669195395903.PNGFigura 4. objeto "select" de pure data que nos va a permitir clasificar en base a una comparación. En la imagen se comparan si el valor que llegue al objeto es igual que 0, igual que 1  ... igual que 7 o no es igual a ninguno de los números anteriores.

image-1669196611945.PNGFigura 5. Cuando la cajita de control envíe un 1 la puerta se abrirá y el mensaje "0.5 1000" llegara al objeto "print". En la imagen el control está cerrado y ha enviado un 0, por lo que la puerta esta cerrada y el mensaje no llega al objeto "print".



2. Bucles o Iteraciones (for/while)...


Definiremos como iteración a la ejecución sistemática, repetida, de una serie de acciones mientras se dé una condición. Existe una condición que se analiza, normalmente, cada vez que se repite dicha iteración.

Si esta condición se sigue cumpliendo, volveremos a repetir el proceso; si, por el contrario, ya no se cumple, pasaremos al siguiente proceso y ejecutaremos la acción correspondiente.

En Arduino ...

Las dos iteraciones más comunes son for y while. En la sentencia for, existe un índice cuyo valor va aumentando o disminuyendo conforme se ejecuta el algoritmo y la condición de la iteración va comprobando si se ha alcanzado el límite o no.

Un esquema de esta estructura sería:

for (int indice= inicial; indice<= final; indice ++){
    Acción
}

Para entenderlo con un ejemplo, imagina que tienes una caja en la que caben solamente 10 cubos. Al principio, la caja estaría vacía, por lo que el valor de indice = 0. La caja se llena cuando hay 10 cubos, por lo que indice<=10. Y lo que queremos hacer es añadir cajas de una en una, por lo que tenemos que escribir que el valor de indice aumente utilizando la expresión indice ++En acción es donde iríamos añadiendo una caja de bombones cada vez.

Así que, nuestro for añadirá bombones hasta que nuestro índice sea menor o igual al valor de final, que en este caso es 10.

Es importante no olvidar colocar los paréntesis, puntos y comas y los corchetes donde corresponda, o Arduino se quejará y no nos hará caso...

A parte del bucle for existe el bucle while, cuyo esquema general sería:

while (condición){
    Acción
}

Un ejemplo, para verlo en funcionamiento aunque no tiene mucha utilidad real, sería:

int var = 0;
while (var < 200) {
  // haz algo 200 veces
  var=var+1; //también podría escribirse como var++.
}

En él, hemos creado una variable con el valor 0, la cuál es aumentada dentro del bucle while con la operación var = var+1. Antes de aumentar este valor, en la línea superior deberíamos escribir la acción que querríamos ejecutar 200 veces.



REFERENCIAS:
Sentencia for en Arduino y ejemplo: https://www.arduino.cc/reference/en/language/structure/control-structure/for/
Sentencia while en Arduino y ejemplo: https://www.arduino.cc/reference/en/language/structure/control-structure/while/Cerrada Somolinos, J. A., & Collado Machuca, M. E. (2015). Fundamentos de programación. Editorial Universitaria Ramón Areces : UNED.
Puerto serie: https://www.luisllamas.es/arduino-puerto-serie/


Figuras:

Figura 1. Condicionales marcados en el diagrama de flujo del control del nivel del agua del río Ebro en Zaragoza.

Figura 2. Captura de pantalla de la IDE de Arduino

Figura 3. operadores de pure data que nos van a permitir comparar valores o caracteres. Cuando la comparación se cumpla enviaran un 1 por su salida, si no se cumple, enviaran un 0.

Figura 4. objeto "select" de pure data que nos va a permitir clasificar en base a una comparación. En la imagen se comparan si el valor que llegue al objeto es igual que 0, igual que 1  ... igual que 7 o no es igual a ninguno de los números anteriores.

Figura 5. Cuando la cajita de control envíe un 1 la puerta se abrirá y el mensaje "0.5 1000" llegara al objeto "print". En la imagen el control está cerrado y ha enviado un 0, por lo que la puerta esta cerrada y el mensaje no llega al objeto "print".

Algo de teoría sobre las ondas

Vibraciones y Ondas

Las vibraciones y ondas están muy presentes en todos los aspectos de nuestra vida, desde el movimiento que realizamos para bailar el hula hoop, hasta los mecanismos de percepción que hemos desarrollado en torno a la vibración, como son la vista y el oído (Crowell, 2000). Las ondas de luz, que nos permiten ver y percibir colores, implican vibración. Podemos escuchar y hablar porque nuestros tímpanos y cuerdas vocales vibran, nuestros corazones laten de manera periódica y nuestros pulmones inhalan y exhalan aire repetidamente.  (French, 1971). 


Figura.1 Niñx vibrando con un aro. 

Las Vibraciones son movimientos que se repiten una y otra vez en torno a una posición de equilibrio ("Vibración", 2022), un movimiento repetitivo que también se conoce como movimiento oscilatorio (French, 1971). 

                      image-1664699032920.gifimage-1664699037684.1.gif

Figura 2. Representación de dos modos de vibración periódica

Periodo, frecuencia y amplitud

Un movimiento que se repite una y otra vez se conoce como movimiento periódico, y el tiempo necesario para llevar a cabo una repetición se denomina periodo, T.  El número de repeticiones por segundo es la frecuencia, f (Crowell, 2000). La frecuencia y el periodo son magnitudes que dependen de la fuente que origina la vibración.

f = 1/T

Como podéis observar la frecuencia (f) es la inversa del periodo (T). Luego T y f son dos unidades que permiten medir la relación entre tiempo y repetición de movimientos oscilatorios. El periodo se mide en segundos, y la frecuencia en Hercios, Hz.

Figura 3. Persona bailando el hula hoop 

Por ejemplo, una persona bailando un aro alrededor de su cintura, realiza un movimiento periódico, un movimiento que se repite. Vamos a fijarnos ahora en el aro, cada vez que el aro toca su ombligo contaremos una vuelta o una repetición. El tiempo que tarda el aro en volver a pasar por el ombligo sera el periodo (T), y la frecuencia (f) es cuantas veces por segundo pasa el aro por el ombligo. Podemos intuir que la velocidad con la que el aro gira va a estar relacionada con el periodo (T) y la frecuencia (f), cuanto más rápido gire el aro menor sera el tiempo que tarda en pasar por el ombligo, luego menor sera el periodo (T). Sin embargo, cuanto más rápido gire el aro, mayor sera la frecuencia (f), ya que el aro pasará más veces por el ombligo, en el mismo periodo de tiempo. 

El tamaño de las vibraciones se refleja en la amplitud A, que se relaciona con el valor máximo alcanzado en cada repetición y se define en física de forma general, como la distancia desde el centro a uno de los extremos del movimiento (Crowell, 2000). Las unidades de la amplitud dependerán de la escala y tipo de movimiento.

image-1664985773557.png

Figura 4. Amplitud del movimiento del aro en una persona bailando un hula hoop.

Cualquier vibración contiene energía, y el valor de esa energía es proporcional a la amplitud. Sin embargo, el periodo y la frecuencia son independientes de la amplitud (Crowell, 2000).


¿Qué son las ondas? 

Figura 5. Niñx vibrando. La vibración no se transmite al aro.

En la imagen superior vemos como la niña vibra, pero no consigue que el movimiento de su vibración se traslade al aro, que cae inmóvil al suelo mientras el niño continúa vibrando. La intención de la niña es la de mover el aro con su vibración, transmitir el movimiento que realiza con su cuerpo a otro objeto, pero, no lo consigue. Por otro lado, en la figura 2, la persona sí logra transmitir el movimiento de su cuerpo al aro que se mueve alrededor de ella de manera periódica.

Una vez tenemos claro qué es una vibración, es el momento de pasar a hablar sobre las ondas. Estas se producen como consecuencia de oscilaciones y vibraciones de la materia ("Onda", 2021). En física, una onda (del latín unda) consiste en la propagación de una perturbación de alguna propiedad del espacio, por ejemplo, densidad, presión, campo eléctrico o campo magnético, implicando un transporte de energía sin transporte de materia. ("Onda", 2022). 

Figura 6. Fila de personas cayendo por el empuje de la última.

Para entenderlo mejor, vamos a utilizar una metáfora que si queréis podéis utilizar para explicárselo a vuestros alumnos. Imagina que tenemos una fila de 5 niños esperando para entrar en clase. El ultimo niño, al que asignaremos la posición 5, empuja al que tiene delante: niño número 4. El niño 4 sin poder evitarlo se precipita sobre el 3, que a su vez se precipita sobre el 2 que inevitablemente empuja al 1, que choca contra la puerta. Sin que los niños se desplacen, el empujón del niño 5 ha llegado hasta la puerta, lo mismo sucede con las ondas, sin que la materia se desplace, una perturbación se propaga a través del espacio.
Este movimiento, iniciado por el niño 5, se ha transmitido de niño en niño en una reacción en cadena, como en el ejemplo clásico de la fila de fichas de dominó cayendo. La perturbación en la fila causada por el niño 5 ha llegado hasta la puerta pasando de niño en niño. Vemos, por tanto, que la fila sería el medio y los niños las partículas del medio. 

Las magnitudes que hemos visto relacionadas con las vibraciones: periodo (T), frecuencia (f) y aptitud (A); se aplican también a las ondas. 

image-1664698562895.svg.png
Figura 7. Amplitud (A) y periodo (T) en una onda representada en función del tiempo.


Las ondas y su clasificación

Las propiedades físicas de las ondas dependen y varían en función del origen y medio a través del cual se propagan (Onda, 2021). Las clasificamos de la siguiente manera:

1. Según el MEDIO en que se propagan:


2. Según su PERIODICIDAD:

image-1664700256441. onda no periodica (2).pngFigura 8. Representación de una onda periódica (izquierda) y de una onda no periódica (derecha)

3. Según su DIRECCIÓN:

          image-1664795376708.gif Figura 9. Onda unidimensional.

    image-1664795094032.gifFigura 10. Onda bidimensional.

image-1664795267148.gif Figura 11. Onda tridimensional.


Según el MOVIMIENTO DEL MEDIO respecto a la dirección en que se propague la onda:

image-1664703324682.gif

Figura 12. Movimiento de una onda longitudinal (arriba) y de una onda transversal (abajo). La marca roja en ambos casos indica una partícula del medio y como esta se mueve.


Aquí tienes algunos ejemplos de tipos de ondas:


Partes de una onda.

En la siguiente imagen vemos las partes de una onda que se propaga en el espacio:image-1664712872747.jpg

Figura 13. Partes de una onda: Cresta, valle, amplitud (A), longitud de onda (λ) y el eje de equilibrio.


Longitud de onda

La longitud de onda, representada por la letra λ, hace referencia al espacio que avanza el movimiento en cada repetición, y se puede definir como el espacio que abarca cada una de esas repeticiones. Para medirla tomaremos como punto de referencia una cresta, por lo tanto, la longitud de onda sera la distancia entre dos crestas consecutivas. Debemos tener cuidado, porque la longitud de onda guarda ciertas similitudes con el periodo. Ambas nos hablan de la repetición del movimiento, pero existe una diferencia fudnamental entre ambas, ya que la longitud de onda (λ) registra espacio, y el periodo (T) registra tiempo. Cuando veamos gráficas debemos tener en cuenta el sistema de representación que se utiliza, y fijarnos no solo en qué variables representan los ejes vertical y horizontal, sino también en qué unidades se presentan estas variables.

image-1665053142377.pngFigura 14. Representación de una onda en función del espacio (arriba) y una onda en función del tiempo (abajo)

En la figura 14, el eje horizontal del gráfico superior representa el espacio, por eso, la magnitud entre crestas medida en metros, es la longitud de onda (λ). En el gráfico inferior, el eje horizontal representa el tiempo, por lo que la magnitud definida por la distancia entre crestas es el periodo (T) y se mide en segundos.
Debemos fijarnos en que aunque en esta imagen la longitud de onda y el periodo se representen de forma equivalente, sus valores no lo son. T y λ son variables diferentes y relacionándolas podemos obtener la velocidad de la onda (v), ya que la velocidad es el espacio recorrido en un tiempo determinado.

v = λ / T = λ f

Sobre la velocidad volveremos a hablar más adelante cuando aparezcan los conceptos de reflexión y refracción.


Frente de onda

El frente de onda es el lugar geométrico de los puntos del medio que se encuentran afectados por la perturbación en un instante determinado. Tomaremos las crestas como referencia, por lo que la distancia entre frentes de onda es igual a la longitud de onda. La dirección de propagación de un frente de onda es perpendicular al mismo.

image-1664796260290.png

Figura 15. Frente de onda en una onda circular(arriba) y en una onda plana (abajo).

Principio de Fresnel - Huygens

Este método plantea un modelo que nos va a permitir analizar y comprender cómo se propagan las ondas y nos sera útil para entender los fenómenos que con ellas ocurren. 

"Todo punto de un frente de onda inicial puede considerarse como una fuente de ondas esféricas secundarias que se extienden en todas las direcciones con la misma velocidad, frecuencia y longitud de onda que el frente de onda del que proceden." ("Principio de Fresnel", 2020)

image-1664812910972.jpgFigura 16. Representación del principio de Fresnel-Huygens en una onda plana (izquierda) y en una onda circular (derecha)

Retomando nuestro ejemplo de la fila de niños, vemos como cada niño que recibe un empujón, genera a su vez otro empujón sobre el siguiente niño, en la misma dirección que el empujón recibido. Digamos que cada niño se convierte en un origen secundario de un nuevo empujón. 


Relación entre ondas

Superposición

Algo muy interesante sobre las ondas es que, a diferencia del movimiento de objetos, que al entrar en contacto generan fuerzas de repulsión entre ellos, las ondas se superponen en una misma región del espacio sin repulsión, y en el punto en el que coinciden se suman (Crowell, 2000. p.40).

image-1664722208418.gif

image-1664722220185.gifFigura 17. Dos ondas con diferente dirección de desplazamiento.


image-1664722296960.gifFigura 18. Resultado de la superposición de las ondas de la figura 17.

Video 1.  Superposición de ondas superficiales en el agua.

Fase

Otro concepto importante a la hora de trabajar con ondas, sobre todo lo podremos aplicar en el sonido, es el de la fase. La fase de una onda φ, es la posición relativa de un punto a lo largo de la onda (Polyakov, 2022). Es decir, en que posición de la repetición se encuentra un punto, en un momento determinado. La mediremos en función del ángulo descrito por su representación circular, en la que una repetición representa el circulo completo:

image-1664782214601.gif

Figura 19. Representación de la fase de una onda. (Phase=fase, Wave=onda)

Esta magnitud cobra importancia al comparar las fases de varias ondas. A esta comparación la llamaremos diferencia de fase. Y la mediremos en grados o radianes

image-1664782794748.gif 

Figura 20. Representación de la diferencia de fase entre dos ondas con la misma frecuencia. (Phase=fase, Wave=onda)


La diferencia de fase va a influir en el resultado de la superposición de ondas. Podemos comprobar, que cuando la diferencia de fase es 180º las ondas se anulan, en este caso decimos que la fase de una, es la inversa de la otra y que se encuentran en oposición de fase

image-1664783619153.gifFigura 21. Resultado de la suma de dos ondas sinusoidales de la misma frecuencia, pero diferencia de fase variable.

Para entenderlo un poco mejor vamos a volver al símil del hula hop pero con 2 aros en lugar de 1.  Cuando la persona comienza, sujeta los aros en la misma posición tocando su espalda, en ese momento los aros estarían en fase. Tras varias vueltas, en el mismo instante un aro toca el ombligo, sin embargo, el otro aro que gira más rápido está tocando la espalda de la persona, en ese momento los aros no están en fase, están desfasados, hay una diferencia de fase entre ellos. Para ilustrarlo en la siguiente imagen podéis ver muchos aros girando en distintas fases:

Figura 22. Muchos aros girando con diferentes fases unos de otros.


Fenómenos/Propiedades de las ondas

Absorción y Atenuación

Tanto en la absorción como en la atenuación, la amplitud (A) de la onda disminuye, pero por diferentes motivos. Recordemos que la amplitud es la distancia máxima alcanzada por una partícula del medio en cada repetición.

En el caso de la absorción, se produce una disminución de la intensidad y, por lo tanto, de la amplitud de una onda al perder energía mientras se propaga (Giménez Valentín, 2019). Esta perdida se debe a las interacciones con el medio (Giménez Valentín, 2019), como el rozamiento o pérdida en forma de calor. 

image-1664817585440.jpgFigura 23. atenuación de una onda superficial y representación de la disminución de su amplitud a medida que se propaga.

Si hablamos de atenuación esa disminución en la amplitud se produce al repartirse su energía en frentes cada vez más amplios (Giménez Valentín, 2019). Este fenómeno lo encontraremos en ondas bidimensionales y tridimensionales, como en el ejemplo de la figura 23, porque al propagarse en dos y tres direcciones respectivamente ocupan progresivamente mayor espacio. En una onda unidimensional el espacio ocupado, cuando esta se propaga, no varía.

Para entenderlo un poco mejor tomaremos la metáfora económica que nos presentan en el siguiente video el profesor de la UPV, Marcos Herminio Giménez Valentín, y su amigo "Jota", que es una cabeza. En el ejemplifican primero la absorción y luego la atenuación:

Video 2. Ejemplo de atenuación y absorción de una onda.


Reflexión y Refracción 

Cuando una onda, que se propaga en un medio, llega a otro medio, se produce un cambio de dirección de la onda incidente y por lo general tendremos dos ondas resultantes, una onda que se refleja y otra onda que se refracta (Rubio Michavila, 2019a). La onda que se refleja vuelve al mismo medio y la onda que se refracta se propaga en un medio distinto.

La reflexión consiste en un cambio de dirección, cuando incide una onda en la superficie limítrofe entre dos medios. La onda reflejada se continúa propagando a través del mismo medio por el que a incidido (Rubio Michavila, 2019a). La velocidad (v) de la onda reflejada y la onda incidente es la misma ya que la velocidad (v) depende del medio y al no cambiar de medio esta se mantiene.  

image-1664808231107.pngFigura 24. Diagrama de la reflexión y refracción de una onda al llegar al límite entre dos medios.

En la imagen superior (figura 24), la onda que pasa al medio gris (verde), y que en el dibujo se denomina "Onda Transmitida", es el resultado de la refracción de la onda incidente (roja). En la refracción se da un cambio de dirección y de medio cuando, una onda incide en la superficie limítrofe entre dos medios. La onda refractada se propagará por el nuevo medio con una velocidad (v) diferente, ya que como habíamos dicho antes, esta depende del medio en que se propaga la onda.

Con esta variación de velocidad (v), el periodo (T) y la frecuencia (f) se conservan sin embargo la longitud de onda (λ) varía, aumentando cuando la velocidad aumente y disminuyendo cuando la velocidad disminuya (Rubio Michavila, 2019b). 

Figura 25. Persona en una fila rebotando entre otras dos. 

Retomemos la metáfora de la fila de niñxs para comprender un poco mejor estos conceptos. El ultimo niño, al que asignamos la posición 5, empuja al que tiene delante: niño número 4. El niño 4 sin poder evitarlo se precipita sobre el 3, que a su vez se precipita sobre el 2 que inevitablemente empuja al 1, que choca contra la puerta. Tras golpearse con la puerta El niño 1 rebota y sin poder evitarlo empuja al niñx 2 que ha su vez empuja al niño tres. Tras golpear la puerta los niños pasan a empujarse en la dirección opuesta a la que lo hacían antes de chocar con la puerta, pero manteniéndose fuera de la clase, esto sería la reflexión del movimiento al llegar a la puerta. Sin embargo, del golpe del niño 1 en la puerta se cae un gorro que está colgado detrás. Parte de la energía con la que el niño 1 ha impactado en la puerta se transmite a esta, la atraviesa y llega al gorro que esta al otro lado. Esto sería el equivalente de la refracción ya que el movimiento ha continuado propagándose por un nuevo medio. 


Difracción

Acabamos de ver qué les pasa a las ondas cuando al propagarse cambian de un medio a otro, y ahora veremos lo que sucede cuando una onda se desvía al atravesar un orificio o encontrar un obstáculo.

El objeto difractante o la rendija, se convierte en una fuente secundaria de la propagación de la onda ("Difracción", 2022). Veremos con más detalle el ejemplo de la rendija, para ello, vamos a recordar que según el principio de Fresnel - Huygens, todo punto de un frente de onda inicial puede considerarse como una fuente de ondas esféricas secundarias.

También, debemos de tener en cuenta que la relación entre la longitud de onda y el tamaño de la rendija van a condicionar la difracción, por eso es necesario que el tamaño de la abertura sea del mismo orden que la longitud de la onda incidente (Rubio Michavila, 2019c). Cuando un frente de ondas llega a una superficie con una rendija del mismo tamaño que su longitud de onda, el punto medio de la rendija se convierte en una fuente puntual de ondas esféricas que se propagan con la misma velocidad, frecuencia y longitud de onda:

image-1664814730809.gifFigura 26. Difracción de una onda plana cuando el ancho de la ranura es igual a la longitud de onda.

Si aumentamos el tamaño de la rendija, aparecerán más puntos como fuentes puntuales de ondas esféricas:

image-1664814923657.gifFigura 27. Difracción de una onda plana cuando el ancho de la ranura es varias veces la longitud de onda.




Extra: Si el mundo de las ondas os ha apasionado y queréis saber más en el siguiente link podéis encontrar un curso detallado de la UPV sobre oscilaciones y ondas.

Figuras:

Figura 1. Niñx vibrando con un aro. https://giphy.com/gifs/fail-kid-hula-hoop-cIhzInb5BWjXJhREXk 

Figura 2. Representación de dos modos de vibración periódica. https://massbateria.com/modos-de-vibracion-2/

Figura 3. Persona bailando el hula hoop https://giphy.com/gifs/thisgirlcan-hula-hoop-hooping-this-girl-can-JTbqfw3dydAg6d8axU

Figura 4. Amplitud del movimiento del aro en una persona bailando un hula hoop. Imagen editada. https://www.kindpng.com/imgv/ihmTThR_person-using-hula-hoop-hd-png-download/ 

Figura 5. Niñx vibrando. La vibracion no se transmite al aro.  https://giphy.com/gifs/fail-kid-hula-hoop-fSdPI1jp98tlg6xpZS?utm_source=media-link&utm_medium=landing&utm_campaign=Media%20Links&utm_term=https://giphy.com/ 

Figura 6. Fila de personas calends por el empuje de la última. https://giphy.com/gifs/peterbjornandjohn-peter-bjorn-and-john-3o6gE57nEDKeoCxsrK 

Figura 7. Amplitud (A) y periodo (T) en una onda representada en función del tiempo. https://es.wikipedia.org/wiki/Per%C3%ADodo_(f%C3%ADsica)

Figura 8. Representación de una onda periódica (izquierda) y de una onda no periódica (derecha). http://ondassonorasfaviotorrealba.blogspot.com/2015/11/segun-el-medio-en-que-se-propagan.html 

Figura 9. Onda unidimensional. https://intothecontinuum.tumblr.com/post/29160638835/is-it-possible-to-visualize-3-dimensional-standing 

Figura 10. Onda bidimensional. https://intothecontinuum.tumblr.com/post/29165448842/the-end-of-this-post-concludes-with-a 

Figura 11. Onda tridimensional. https://intothecontinuum.tumblr.com/post/29165448842/the-end-of-this-post-concludes-with-a 

Figura 12. Movimiento de una onda longitudinal (arriba) y de una onda transversal (abajo). https://www.physicslens.com/wp-content/uploads/2022/03/longitudinal-transverse-waves.gif 

Figura 13. Partes de una onda. https://www.lifeder.com/onda-transversal/

Figura 14. Representación de una onda en función del espacio (arriba) y una onda en función del tiempo (abajo). https://www.google.com/url?sa=i&url=http%3A%2F%2Fhyperphysics.phy-astr.gsu.edu%2Fhbasees%2FSound%2Fwavplt.html&psig=AOvVaw022BZbBkeoNNzkiuTa9JBV&ust=1665140039984000&source=images&cd=vfe&ved=0CAwQjRxqFwoTCKD91pe4y_oCFQAAAAAdAAAAABAD 

Figura 15. Frente de onda en una onda circular(arriba) y en una onda plana (abajo). https://www.aplustopper.com/what-is-wave/ 

Figura 16. Representación del principio de Fresnel-Huygens en una onda plana (izquierda) y en una onda circular (derecha). https://tfgonline.es/principio-de-huygens/ 

Figura 17. Dos ondas con diferente dirección de desplazamiento. http://ondassonorasfaviotorrealba.blogspot.com/2015/11/segun-el-medio-en-que-se-propagan.html 

Figura 18. Resultado de la superposición de las ondas de la figura 17. http://ondassonorasfaviotorrealba.blogspot.com/2015/11/segun-el-medio-en-que-se-propagan.html 

Figura 19. Representación de la fase de una onda. (Phase=fase, Wave=onda). https://www.nist.gov/image/phasegif 

Figura 20. Representación de la diferencia de fase entre dos ondas con la misma frecuencia. (Phase=fase, Wave=onda). https://www.nist.gov/image/phase-differencegif 

Figura 21. Resultado de la suma de dos ondas sinusoidales de la misma frecuencia, pero diferencia de fase variable. https://mriquestions.com/what-is-phase-encoding.html 

Figura 22. Muchos aros girando con diferentes fases unos de otros. https://giphy.com/gifs/hooping-hula-perth-MwC8t7MaaR7kCr3FaN 

Figura 23. atenuación de una onda superficial y representación de la disminución de su amplitud a medida que se propaga. http://newton.cnice.mec.es/materiales_didacticos/ondas2/ondas-conclusion4.html?3&2  

Figura 24. Diagrama de la reflexión y refracción de una onda al llegar al límite entre dos medios. https://www.prored.es/la-reflexion-en-las-ondas-y-radioenlaces/ 

Figura 25. Persona en una fila rebotando entre otras dos. https://giphy.com/gifs/bully-harold-lloyd-waiting-in-line-26AHRsTEXSMgl3rXi 

Figura 26. Difracción de una onda plana cuando el ancho de la ranura es igual a la longitud de onda. https://es.wikipedia.org/wiki/Principio_de_Fresnel_-_Huygens 

Figura 27. Difracción de una onda plana cuando el ancho de la ranura es varias veces la longitud de onda. https://es.wikipedia.org/wiki/Principio_de_Fresnel_-_Huygens 

Videos: 

Video 1. Superposición de ondas superficiales en el agua. https://www.youtube.com/watch?v=1mPYQ5DVPxQ&t=7s 

Video 2. Ejemplo de atenuación y absorción de una onda. https://www.youtube.com/watch?t=114&v=I4tCNpnR-b4&feature=emb_imp_woyt 


Referencias:

Crowell, B. (2000). Vibrations and waves (Vol. 3). Light and Matter.

Difracción. (2022, abril 23).  En Wikipedia. https://es.wikipedia.org/wiki/Difracci%C3%B3n

French, A. P. (1971). Vibrations and Waves. CRC Press.

Gimenez Valentin, M. H. [Universitat Politècnica de València UPV]. (2019, 30 abril). Atenuación y absorción de una onda | 15/25 | UPV. [Video]. YouTube. https://www.youtube.com/watch?v=I4tCNpnR-b4&t=114s 

Onda. (2021, julio 15). Estefania Coluccio Leskow, En Enciclopedia Concepto. Consultado el 1 octubre 2022 en https://concepto.de/onda-2/ 

Onda. (2022, septiembre 21).  En Wikipedia. https://es.wikipedia.org/wiki/Onda#:~:text=La%20teor%C3%ADa%20de%20ondas%20se,Ostrovsky%20y%20Potapov%2C%201999)

Polyakov, S. (2022, Enero 25). New Telecom Receiver System Checks Reliability of Message Components in Real Time. National Institute of Standards and Technology. https://www.nist.gov/news-events/news/2022/01/new-telecom-receiver-system-checks-reliability-message-components-real-time

Principio de Fresnel - Huygens. (2020, agosto 20) En Wikipedia. https://es.wikipedia.org/wiki/Principio_de_Fresnel_-_Huygens 

Rubio Michavila, C. [Universitat Politècnica de València UPV].  (2019a, 30 abril). Reflexión de las ondas | 18/25 | UPV. [Video]. https://www.youtube.com/watch?v=m32o8WTXy-g&list=PL6kQim6ljTJudzpws0ggAtF0RQsIPwgGr&index=18 

Rubio Michavila, C. [Universitat Politècnica de València UPV].  (2019b, 30 abril b). Refracción de ondas. | 19/25 | UPV. [Video]. https://youtu.be/mXoVi8mv15Y 

Rubio Michavila, C. [Universitat Politècnica de València UPV].  (2019b, 30 abril c). Difracción de ondas. Lección 19 | 20/25 | UPV [Video]. https://youtu.be/vivFGdGVItQ 

Vibración. (2022, septiembre 16). En Wikipedia. https://es.wikipedia.org/wiki/Vibraci%C3%B3n 

Las ondas y el color

La idea inicial de la que vamos a partir es que los objetos no tienen color en sí mismos, sino que su color proviene de la luz que incide sobre ellos. Este es el concepto nº 1 cuando se habla de las propiedades físicas del color. Los objetos no son de colores en sí mismos. Si somos capaces de percibir algo de color rojo, por ejemplo, es porque ese objeto absorbe la luz de todas las longitudes de onda del espectro visible excepto la longitud correspondiente al color rojo. De la misma manera, un objeto negro absorbe todas las longitudes de onda y uno blanco las rechaza a todas.

La luz visible, que es la que nos permite ver los colores es una onda electromagnética, periódica, tridimensional y transversal, como ya hemos visto en el apartado anterior. La visión humana es bastante limitada y el espectro que abarca la luz visible solamente va de los 400 a los 700 nm:

image-1664885573353.12.29.png

La imagen superior nos muestra que el ojo humano no es capaz de percibir la mayoría de la luz que nos rodea, sino solamente los colores que asociamos al arco iris. 

Lo que miden los 400 a 700 nm que podemos ver es la longitud de onda (λ) . Este concepto ya lo hemos explicado en la página anterior, así que aquí solamente recordaremos que la longitud de onda se refiere a la distancia entre dos puntos máximos consecutivos:

image-1664956068789.svg.png

Para poder visualizar los colores de las diferentes longitudes de onda que componen la luz visible, es conocido el experimento realizado con un prisma, gracias al que la luz es refractada, reflejada y descompuesta.

image-1664956308799.gif


Síntesis aditiva y superposición de ondas

Hablar de la luz visible y de su descomposición con un prisma nos conduce a la síntesís aditiva. En la página anterior hemos visto que cuando superponemos dos ondas, se suman. ¿Y esto qué consecuencias tiene en el mundo del color? Todos hemos oído hablar del sistema RGB (Red Green Blue) que es el que se utiliza en las pantallas de los ordenadores y televisores. y en esos tres colores es en los que se basa la generación de diferentes colores empleando la luz. Este tipo de síntesis aparece en contraposición a la síntesis sustractiva, que es la que emplean las impresoras o nosotros cuando queremos pintar algo empleando pigmentos. Esta síntesis está basada en otros tres colores: CMY (Cyan Magenta Yellow y también el Key que equivale al negro):

image-1664963094631.pngEn la imagen superior podemos ver los colores primarios y los secundarios de la síntesis aditiva a la izquierda y sustractiva a la derecha.

Te aconsejo que en este punto experimentes con linternas y papel de celofán. Solo necesitarías dos linternas (una de ellas puede ser la de tu móvil) y papeles de celofán con los colores rojo, verde y azul. Si tapas una de la linterna con celofán rojo y la otra con verde, veras que la luz resultante al proyectarlas sobre el mismo punto es amarilla.

¿Cómo percibimos el color?

Hablar de luz y colores luz nos conduce a hablar sobre cómo percibimos nosotros esos colores y con ello a unos tipos de células denominados bastones y conos. A estas células se les conoce como fotorreceptores y son las encargadas de absorber la luz y transformarla en señales eléctricas. No vamos a entrar a hablar en detalle sobre ellas, pero mencionaremos simplemente que los bastones son los que cuentan con una fotosensibilidad alta y poca agudeza visual, siendo incapaces de distinguir entre los diferentes colores; mientras que los conos son los verdaderamente responsables de la percepción de los colores.

Más adelante, cuando usemos Arduino, probaremos dos sensores que funcionan de una manera similar a los bastones y conos; una fotorresistencia y el sensor TCS3200 respectivamente.


REFERENCIAS:

Percepción del color: https://es.wikipedia.org/wiki/Percepci%C3%B3n_del_color
Imagen espectro luz visible: https://es.wikipedia.org/wiki/Espectro_visible#/media/Archivo:Electromagnetic_spectrum-es.svg
Longitud de onda: https://es.wikipedia.org/wiki/Longitud_de_onda
Imagen longitud de onda: https://es.wikipedia.org/wiki/Longitud_de_onda#/media/Archivo:Sine_wavelength.svg
Imagen prisma descomponiendo luz: https://es.wikipedia.org/wiki/Prisma_(%C3%B3ptica)#/media/Archivo:Light_dispersion_conceptual_waves.gif
Imagen síntesis aditiva y sustractiva: https://1.bp.blogspot.com/-b5-zMiCiRbg/XJ0E963BwLI/AAAAAAAAAbM/dvg_z4d8hlYPJHKghKNRpIL2ojXShrBzgCLcBGAs/s1600/mezcla_aditiva_sustractiva.png
Fotorreceptores: https://www.kenhub.com/es/library/anatomia-es/fotorreceptores






Las ondas y el sonido

El sonido es una onda mecánica, tridimensional y longitudinal. Es mecánica porque necesita de un medio elástico para propagarse, por ejemplo, en el espacio exterior, más allá de la atmósfera, no hay ondas sonoras ya que el sonido no se propaga en el vacío. Es tridimensional porque se propaga en tres dimensiones, y es longitudinal porque el movimiento de las partículas del medio sigue la misma dirección en que se propaga la onda.

Recordamos que una onda es la propagación de una perturbación de alguna propiedad del espacio, implicando un transporte de engería sin transporte de materia. En el caso de sonido una de las propiedades perturbadas es la presión, que se define como fuerza por unidad de superficie. La propagación de estas variaciones de presión es lo que conocemos como onda sonora y esa variación de presión es lo que percibimos y denominamos sonido.

Para ilustrar esto vamos a ver un gif de cómo genera un altavoz ondas sonoras. En el gif vemos como la membrana del altavoz se mueve, vibra, este movimiento genera cambios de presión y densidad en el aire. Estos cambios son lo que nuestro oido va a captar.

image-1665998925713.gifFigura 1. Membrana de un altavoz vibrando.


¿Como percibimos el sonido?

Percibimos el sonido a traves del oído, que nos permite captar los cambios de presión en el aire generados por las ondas sonoras. Estas ondas mecánicas son captadas y transformadas en impulsos eléctricos que el cerebro puede interpretar. 

Video 1. Funcionamiento del oído.

Pero no solo el oído nos va a permitir percibir estos cambios de presión, nuestro cuerpo también va a notar las vibraciones, sobre todo aquellas causadas por frecuencias bajas. Frecuencias que va a hacer vibrar diferentes tejidos y cavidades de nuestros cuerpos.  

Asi que recordar que, si tenéis algún alumno con una pérdida parcial o total de audición, aun va a poder percibir sonido, percibir música a traves de su cuerpo y por supuesto también crearla. Para conseguir ondas sonoras con frecuencias bajas podéis probar con instrumentos de percusión como un bombo y para reproducir frecuencias bajas con un altavoz necesitareis un subwoofer. 

Intensidad, volumen y amplitud

Cuando hablamos del volumen de un sonido nos referimos a la intensidad con la que percibimos ese sonido. Esta intensidad está relacionada con la amplitud de la onda sonora, de forma que, si la amplitud aumenta, también lo hara la intensidad con la que percibimos ese sonido. Como vimos en el capítulo anterior, la amplitud es el valor máximo alcanzado por un punto del medio en cada repetición. A mayor amplitud de onda, percibiremos un sonido como más fuerte, mayor sera su volumen. 

Nuestro oído adapta su sensibilidad a la intensidad que percibe, o digámoslo de una forma más precisa, la sensibilidad de nuestro oído en función de la intensidad de la onda no tiene una progresión lineal si no logarítmica. Esto nos permite distinguir pequeñas variaciones de intensidad en sonidos muy suaves, pero no en sonidos muy fuertes, en los que solo percibiremos grandes cambios de intensidad (Cabrera, n.d.).

Este comportamiento de nuestra percepción acústica nos lleva a diferenciar entre intensidad de una onda y la intensidad con la que percibimos esa onda. Para medir cada una de ellas utilizaremos diferentes escalas y magnitudes. La intensidad de una onda sonora la mediremos en W/m^2 y la intensidad con la que percibimos una onda la mediremos en decibelios (dB). 

Umbral de audición y umbral de dolor

En lo que a intensidad se refiere nuestro oído también tiene sus limites. Podremos escuchar sonidos desde el umbral de audición: 10 ^-12 W/m^2 o 0dB, hasta el umbral de dolor: 1W/m^2 o 120dB. Por debajo del umbral de audición no escucharemos nada, por encima del umbral de dolor podemos dañar nuestros oídos (Gimenez Valentin, 2019).

image-1665322868118.jpgFigura 2. Rango de intensidad sonora percibida por el ser humano en dB.

Es muy importante no someter al oído a intensidades por encima del umbral de dolor, ni cercanas a este, especialmente durante un largo periodo de tiempo, ya que se pueden generar daños y perdidas de audición irreversibles. Cuando trabajemos con nuestros alumnos va a ser de vital importancia el control del volumen y debemos enseñarles a cuidar de sus oídos. 

Cuando trabajemos con sonido en Pure data, vamos a regular el volumen modificando la amplitud (A). Estas modificaciones de amplitud también nos van a ser útiles a la hora se sumar ondas para crear sonidos más complejos, digamos que nos permitirá regular cuanta cantidad de una onda mezclamos con otra, como si de una receta de cocina se tratara, cuanta sal y cuanta vinagre le echamos al gazpacho para potenciar su sabor, la cantidad de sal va a sera una amplitud de una onda y la cantidad de vinagre sera la amplitud de otra onda. 

Como veíamos anteriormente y ya que el sonido es una onda tridimensional, experimenta atenuación al propagarse. Por eso cuanto más nos alejamos de una fuente sonora menor es el volumen que percibiremos.

Frecuencia y tono, resonancia y timbre

Cuando hablamos del tono de un sonido nos referimos a la frecuencia. Esta frecuencia viene determinada por el número de repeticiones por unidad de tiempo y la medimos es Hercios (Hz). La frecuencia guarda cierta relación con la longitud de onda. Veamos qué relación: recordemos que la velocidad de propagación de una onda depende del medio por el que se propaga, y en un mismo medio se mantiene constante. Por ejemplo, la velocidad de propagación del sonido en el aire, a una temperatura de 20º es siempre 343 m/s. Tambien veíamos que la velocidad de propagación es igual a la longitud de onda por la frecuencia, que distancia recorre cada repetición en función del tiempo.

v = λ f = λ / T

En un mismo medio una onda con una mayor frecuencia tendrá menores longitudes de onda, y una onda con menor frecuencia tendrá una longitud de onda mayor. 

Ejemplo: La longitud de onda (λ) de un sonido que se propaga en el aire con una frecuencia de 50 Hz y de 10.000 Hz:

frecuencia de 50 Hz (λ = v/f) frecuencia de 10.000 Hz (λ = v/f)

λ=343/50   

λ=6,86 m

λ=343/10.000 

λ=0,0343 m

Tabla 1. Relación entre frecuencia y longitud de onda para dos ondas que se propagan en el aire.

Como bien sabemos la frecuencia es una magnitud que depende de la fuente que origina la onda, por lo que cuando una onda cambia de medio la frecuencia se mantiene constante, luego, lo que va a variar con la velocidad de propagación de la onda es la longitud de onda. 

Para nuestros oídos la frecuencia es lo que determina como de grave o agudo es un sonido, también determina las notas de la escala musical. Cada nota de la escala musical corresponde a una vibración con una frecuencia especifica, por ejemplo, un Re que tiene una frecuencia de 293,6 Hz. 

Sonidos graves

20-256 Hz

Sonidos medios

256 Hz - 2 KHz

Sonidos agudos

2 KHz - 20KHz

Tabla 2. Clasificación de los sonidos según su frecuencia en graves, medios y agudos.


¿Pero porque la misma nota tocada en un violin suena diferente que en un piano? 

Para responder a esta pregunta vamos a introducir primero el concepto de resonancia, que es el fenómeno que permite a una cantante de ópera romper una copa con su voz. Pero como sucede esto?

Toda vibración requiere de una fuerza que la genere y como vimos en la definición de onda, una onda implica un transporte de energía sin transporte de materia. Tambien vimos que esta energía es proporcional a la amplitud de la onda, amplitud que disminuye con los fenómenos de absorción y atenuación. En el caso de la resonancia la amplitud va a aumentar considerablemente para frecuencias especificas que dependerán del objeto afectado por una vibración.

La copa de cristal tiene una frecuencia natural de vibración, que es a la que tendera a vibrar esta copa después de ser golpeada ("Frecuencia Natural", 2022). Cuando esta copa es afectada por una onda cuya frecuencia coincide con su frecuencia natural de vibración, se genera el fenómeno de la resonancia y la amplitud de la vibración en la copa para esa frecuencia aumentara considerablemente. Este fenómeno indica la tendencia de un sistema a vibrar con mayores amplitudes de onda al ser afectado por una vibración cuya frecuencia coincide con las frecuencias naturales de vibración del sistema (Crowell, 2000). En una situación en la que tenemos un cuerpo vibrando en resonancia se consigue la mayor amplitud en relación a la cantidad de energía transportada por la onda. En el siguiente video vemos el experimento de la copa que podéis, (con mucho cuidado), realizar con vuestros alumnos.

Video 2. Rotura de una copa haciéndola vibrar a su frecuencia de resonancia.

En la naturaleza rara vez vamos a encontrar ondas compuestas por una sola frecuencia, ondas puras. Tampoco vamos a encontrar sistemas con una unica frecuencia de resonancia. Los objetos vibrantes que generan y a traves de los cuales se propagan las ondas sonoras van a tener varias frecuencias naturales de vibración. Este grupo de frecuencias resonantes es lo que nos permite diferenciar un violin y un piano cuando tocan la misma nota, esta diferencia o característica de cada instrumento es lo que conocemos como timbre

Aunque un violin toque la nota Re correspondiente a la frecuencia 293,6 Hz, la onda que produce el instrumento no está formada únicamente por la frecuencia 293,6 Hz, no es una onda pura. Esa onda también contiene un grupo de frecuencias en su mayoría superiores a 293,6 Hz. Este grupo de frecuencias resonantes son múltiplos de la frecuencia fundamental 293,6 Hz, y es lo que conocemos como armónicos.

Vamos a ver que frecuencias acompañan a la fundamental de la nota "Re" tocada por varios instrumentos:

image-1665413504381.png

image-1665413529156.png

image-1665413607996.png Figura 3. Tres graficas del rango de frecuencias que se generan al tocar la nota Re=296,6 Hz con tres instrumentos diferentes.

Como vemos en las gráficas anteriores los armónicos creados por diferentes instrumentos al tocar la misma nota tienen diferentes intensidades. La cantidad e intensidad de cada uno de los armónicos que acompañan al sonido fundamental es lo que va a determinar el timbre de un sonido.

El espectro audible

"El espectro audible,​ también denominado campo tonal, se encuentra conformado por las audiofrecuencias, es decir, toda la gama de frecuencias que pueden ser percibidas por el oído humano. Un oído sano y joven es sensible a las frecuencias comprendidas entre los 20 Hz y los 20 kHz." ("Espectro audible", 2022)

image-1665307554385.jpg

Figura 4. Espectro audible humano en naranja, y de diferentes animales.

Por debajo del espectro audible humano, 20Hz se encuentran los infrasonidos que nuestros oídos no pueden percibir, sin embargo, son absorbidos por nuestro cuerpo y perceptibles para los oídos de algunos animales. Por encima de 20 kHz se encuentran los ultrasonidos que tampoco percibe nuestro oído, pero si el de algunos animales como los gatos o los delfines. Los ultrasonidos se utilizan comúnmente en medicina para realizar imágenes del interior del cuerpo, ya que a traves de los tejidos de nuestros órganos se propagan estos ultrasonidos. Como vimos anteriormente cuando una onda llega a límite entre dos medios se producen los fenómenos de reflexion y refracción, esto sucede dentro de nuestros cuerpos con las ondas ultrasónicas de una ecografía, y el registro de esas reflexiones es lo que nos permite crear una imagen del interior de nuestros cuerpos (Diplomado en Ultrasonografía Médica, 2017).

Si nos fijamos, los principios básicos de gran parte del desarrollo de herramientas tecnológicas son los mismos que encontramos en el desarrollo de los sentidos del mundo animal, y en general en los fenómenos que constituyen el mundo que nos rodea. Es interesante, revelador e inspirador comparar o tomar como referencia estos fenómenos a la hora de observar y trabajar en el campo de la ciencia y la tecnología. Nuestro oído es un sensor que capta un determinado rango de ondas sonoras, es nuestro micrófono y nuestras cuerdas vocales por ejemplo son nuestro altavoz. En el capítulo anterior veíamos la vista y las ondas electromagnéticas, el ojo es el sensor que nos permite percibir una parte de esta radiación electromagnética. 

Al igual que nuestros ojos y oídos que tiene un rango de valores perceptibles, cuando trabajemos en Arduino con sensores nos pasara lo mismo, y cada sensor registrara un rango especifico de una variable del espacio. Es importante pues, elegir el sensor adecuado en el rango adecuado para lo que queramos medir. La ficha técnica de estos componentes os dará información acerca de ese rango, también conocido como sensibilidad, y de las condiciones de trabajo del componente.


Eco y Reverberación.

Ambos fenómenos son consecuencia de la reflexión de las ondas sonoras y se diferencian principalmente por el tiempo que tarda la onda reflejada en volver al lugar donde se ha originado, también por el número de reflexiones, ya que en la reverberación las ondas rebotan varias veces sobre diferentes superficies. En el ámbito acústico, se diferencian comúnmente por como percibe el oyente estas ondas, en el caso de la reverberación el tiempo entre que el oyente percibe la onda originaria o sonido directo, y las reflexiones de esta, o sonido reflejado, es lo suficientemente corto para que la onda originaria y las ondas reflejadas se perciban como una sola. En el caso del eco este tiempo, es mayor, y el número de ondas reflejadas menor, de manera que el oyente puede percibir como varios sonidos la onda originaria y cada una de las reflexiones de esta (Espuma acústica, 2021). 

Video 3. Ejemplo sonoro de eco y reverberación.

Por lo general la reverberación la encontraremos es espacios cerrados, no muy grandes y con materiales que absorban muy poco sonido. El eco sera más frecuente en espacios abiertos y/o con largas distancias entre la fuente que genera las ondas y el medio en el que estas se reflejan. 



Figuras:

Figura 1. Membrana de un altavoz vibrando. https://fromvinyltoplastic.com/wp-content/uploads/2019/09/sub-animation.gif 

Figura 2. Rango de intensidad sonora percibida por el ser humano en dB. https://www.fisic.ch/contenidos/ondas-y-sonido/caracter%C3%ADsticas-del-sonido/ 

Figura 3. Tres graficas del rango de frecuencias que se generan al tocar la nota Re=296,6 Hz con tres instrumentos diferentes. http://www.fqsaja.com/?p=8537 

Figura 4. Espectro audible humano en naranja, y de diferentes animales. https://www.fisic.ch/contenidos/ondas-y-sonido/caracter%C3%ADsticas-del-sonido/


Tablas:

Tabla 1. Relación entre frecuencia y longitud de onda para dos ondas que se propagan en el aire.

Tabla 2. Clasificación de los sonidos según su frecuencia en graves, medios y agudos.


Videos:

Video 1. Funcionamiento del oído. https://www.youtube.com/watch?v=PuC1BDFUq2I 

Video 2. Rotura de una copa haciéndola vibrar a su frecuencia de resonancia. https://www.youtube.com/watch?v=Ory4XB9SmkY 

Video 3. Ejemplo sonoro de eco y reverberación. https://www.youtube.com/watch?v=VK6LAgmllRU 


Referencias:

Cabrera, R. (n.d.) Intensidad y nivel de intensidad sonora Escala de decibeles (dB). Ricardo Cabrera https://ricuti.com.ar/no_me_salen/ondas/Ap_ond_16.html 

Crowell, B. (2000). Vibrations and waves (Vol. 3). Light and Matter.

Diplomado en Ultrasonografía Médica. (2017, julio 11). Principios físicos del ultrasonido. Diplomado en Ultrasonografia. https://diplomadomedico.com/principios-fisicos-del-ultrasonido-2/ 

Espectro audible. (2022, septiembre 24).  En Wikipedia. https://es.wikipedia.org/wiki/Espectro_audible 

Espuma acústica. (2021, diciembre 15). ¿Qué es la reverberación, cuál es la diferencia con el eco y qué problemas te afectan? Espuma acústica. https://www.espumaacustica.online/reverberacion-eco/  

Frecuencia Natural. (2022, septiembre 26) . En Wikipedia. https://es.wikipedia.org/wiki/Frecuencia_natural 

Gimenez Valentin, M. H. [Universitat Politècnica de València UPV]. (2019, 30 abril). Intensidad asociada a una onda | 13/25 | UPV. [Video]. YouTube. https://youtu.be/EqArgDzU3Bc