0 00:00:00,000 --> 00:00:05,000 Hola, muy buenas. En la práctica de hoy aprenderemos algo más sobre la placa 1 00:00:05,000 --> 00:00:09,000 Arduino Uno, que es la que estamos utilizando hasta ahora. También conoceremos 2 00:00:09,000 --> 00:00:14,000 un actuador nuevo, concretamente el zumbador. Volviendo a la placa, vemos que 3 00:00:14,000 --> 00:00:20,000 tiene 14 entradas o salidas digitales. Ya sabemos que lo podemos configurar de 4 00:00:20,000 --> 00:00:25,000 una manera o de otra utilizando la función pinMode y seis entradas 5 00:00:25,000 --> 00:00:30,000 analógicas. Si nos vamos a la referencia de Arduino, vemos que hay una función que 6 00:00:30,000 --> 00:00:34,000 se llama AnalogWrite, lo cual nos puede llamar la atención, puesto que en 7 00:00:34,000 --> 00:00:39,000 principio no tenemos salidas analógicas. Vamos a entrar en ella para ver lo que 8 00:00:39,000 --> 00:00:45,000 nos dice. Esta función nos dice que va a escribir un valor analógico utilizando 9 00:00:45,000 --> 00:00:51,000 la técnica conocida como modulación por anchura de pulso, PWM por sus siglas en 10 00:00:51,000 --> 00:00:56,000 inglés. Y esto lo va a hacer utilizando los pines digitales. Antes de continuar 11 00:00:56,000 --> 00:01:02,000 tenemos que tener bien claro lo que significa salida digital y salida 12 00:01:02,000 --> 00:01:07,000 analógica. Por salida digital entendemos que es una salida que puede estar o a 0 13 00:01:07,000 --> 00:01:11,000 voltios o a 5 voltios, que son los voltajes con los que trabaja la placa 14 00:01:11,000 --> 00:01:17,000 de Arduino Uno. Por salida analógica entendemos que en un pin podemos poner 15 00:01:17,000 --> 00:01:22,000 un valor de voltaje comprendido entre dos valores, por ejemplo entre 0 y 5 16 00:01:22,000 --> 00:01:28,000 voltios. Es decir, si la placa de Arduino trabaja entre 0 y 5 voltios cabría 17 00:01:28,000 --> 00:01:33,000 esperar que con una salida analógica yo pudiera poner en un pin un voltio, un 18 00:01:33,000 --> 00:01:37,000 voltio con 3, un voltio con 5, a diferencia del funcionamiento de los 19 00:01:37,000 --> 00:01:41,000 pines digitales donde o pongo 0 voltios o pongo 5 voltios. Valores intermedios no 20 00:01:41,000 --> 00:01:45,000 es posible. Bien, pues ya hemos visto que Arduino tiene pines de entradas 21 00:01:45,000 --> 00:01:49,000 analógicas pero no tiene pines de salidas analógicas. Entonces, ¿cómo es 22 00:01:49,000 --> 00:01:53,000 posible escribir valores analógicos con Arduino? Bien, pues esto se consigue 23 00:01:53,000 --> 00:02:00,000 utilizando la técnica de modulación de anchura de pulsos, PWM por sus siglas 24 00:02:00,000 --> 00:02:05,000 en inglés. Ahora vamos a ver qué significa esto y cómo funciona. Pinchamos en el 25 00:02:05,000 --> 00:02:09,000 enlace y accedemos a esta página donde Arduino nos muestra información sobre 26 00:02:09,000 --> 00:02:14,000 esta modulación. Si bajamos un poco más vemos un diagrama de voltajes. 27 00:02:14,000 --> 00:02:20,000 Concretamente vemos cinco diagramas. Este primero, segundo, tercero, cuarto y 28 00:02:20,000 --> 00:02:24,000 quinto. ¿Qué quiere decir esto? En el eje de acisas tendríamos el tiempo para 29 00:02:24,000 --> 00:02:29,000 cada una de las gráficas y en el eje de ordenadas los voltajes. Fijémonos en la 30 00:02:29,000 --> 00:02:34,000 del medio. La mitad del tiempo está a nivel de 5 voltios y la otra mitad a 0 31 00:02:34,000 --> 00:02:38,000 voltios. Es decir, esto se correspondería con una salida que está todo el rato 32 00:02:38,000 --> 00:02:43,000 cambiando entre 5 voltios y 0 voltios. La mitad del tiempo está a nivel alto y la 33 00:02:43,000 --> 00:02:47,000 otra mitad del tiempo a nivel bajo. Jugando con el tiempo que está a nivel 34 00:02:47,000 --> 00:02:53,000 alto y a nivel bajo vamos a conseguir el efecto de una salida analógica con más 35 00:02:53,000 --> 00:02:58,000 o menos voltaje. Hay que entender que esto se va a hacer a una alta frecuencia. 36 00:02:58,000 --> 00:03:02,000 Volviendo a la referencia de la función analog write nos dice que cuando 37 00:03:02,000 --> 00:03:06,000 utilizamos esta función la frecuencia con la que se está pasando de valor alto 38 00:03:06,000 --> 00:03:12,000 a valor bajo es de 490 hercios y que incluso en dos de sus pines, el 5 y el 6, 39 00:03:12,000 --> 00:03:18,000 lo hace a unos 980 hercios. Entonces tenemos que entender que el valor de 40 00:03:18,000 --> 00:03:23,000 frecuencia es tan alto que para la mayoría de los receptores esto parecerá 41 00:03:23,000 --> 00:03:28,000 que los estamos alimentando con un voltaje analógico y no digital. Pues 42 00:03:28,000 --> 00:03:32,000 jugando con la cantidad de tiempo que está a nivel alto y la cantidad de 43 00:03:32,000 --> 00:03:37,000 tiempo que está a nivel bajo vamos a conseguir el efecto de tener un valor 44 00:03:37,000 --> 00:03:42,000 analógico más alto o más bajo. Por ejemplo en la primera gráfica con un 45 00:03:42,000 --> 00:03:47,000 ciclo de trabajo del 0% es como si tuviéramos 0 voltios. En la segunda 46 00:03:47,000 --> 00:03:52,000 gráfica con un ciclo de trabajo del 25% es como si tuviéramos un cuarto de 5 47 00:03:52,000 --> 00:03:58,000 voltios. En la del medio con un ciclo de trabajo del 50% un medio de 5 voltios. 48 00:03:58,000 --> 00:04:03,000 ¿Lo entendemos verdad? Jugando con esta modulación conseguimos el efecto de una 49 00:04:03,000 --> 00:04:07,000 salida analógica aunque realmente no lo es. Bueno pues si volvemos a la placa 50 00:04:07,000 --> 00:04:11,000 vamos a ver que hay algunos pines digitales que tienen como una muesca 51 00:04:11,000 --> 00:04:18,000 concretamente el 3, el 5, el 6, el 9, el 10 y el 11. Esos son los pines digitales 52 00:04:18,000 --> 00:04:23,000 que me permiten realizar una modulación de anchura de pulso. Bueno pues vamos a 53 00:04:23,000 --> 00:04:28,000 comprobar que esto funciona bien con un ejemplo. Para ello vamos a ir a Tinkercad 54 00:04:28,000 --> 00:04:36,000 nos vamos a crear un nuevo circuito al que le vamos a llamar PWM y como 55 00:04:36,000 --> 00:04:42,000 siempre pondremos la placa de arduino, la de pruebas, un led, 56 00:04:42,000 --> 00:04:48,000 una resistencia a la que le daremos un valor de 250 ohmios. 57 00:04:48,000 --> 00:04:55,000 Conectamos como siempre la placa y esta resistencia la vamos a conectar al pin 58 00:04:55,000 --> 00:05:01,000 10 y ahora vamos con el código como siempre en texto y vamos a ir 59 00:05:01,000 --> 00:05:06,000 modificando cosas. En este caso ya no necesitamos la función pinmode, la 60 00:05:06,000 --> 00:05:10,000 eliminamos. Lo primero nos vamos a crear una variable con el pin. Esta función de 61 00:05:10,000 --> 00:05:15,000 aquí ya no la necesitamos, esta de aquí tampoco porque en lugar de escribir un 62 00:05:15,000 --> 00:05:21,000 valor digital vamos a escribir un valor analógico así que analogwrite el pin y 63 00:05:21,000 --> 00:05:25,000 aquí si vamos a la referencia de arduino nos dice que tenemos que escribir un 64 00:05:25,000 --> 00:05:31,000 valor entre 0 y 255 es decir cuando escribamos 0 a la salida se pondrá una 65 00:05:31,000 --> 00:05:36,000 modulación de anchura de pulso de tal forma que simule 0 voltios y cuando 66 00:05:36,000 --> 00:05:41,000 pongamos 255 va a ser lo mismo pero para 5 voltios. Vamos a empezar poniendo un 0 67 00:05:41,000 --> 00:05:45,000 y vamos a simular. Vemos que efectivamente nuestro diodo no se ha 68 00:05:45,000 --> 00:05:50,000 encendido. Ahora vamos a poner un valor intermedio. Lo podemos hacer por ejemplo 69 00:05:50,000 --> 00:05:58,000 al no tener que echar cuentas poniendo 255 y multiplicado por 0 con 5. En C el 70 00:05:58,000 --> 00:06:02,000 signo para las multiplicaciones es el asterisco y cuidado porque los decimales 71 00:06:02,000 --> 00:06:08,000 se ponen con punto no con coma. De esta manera estaremos escribiendo un valor en 72 00:06:08,000 --> 00:06:15,000 torno a 127 una cosa así. Vamos a ver. Bueno se enciende nuestro LED. 73 00:06:15,000 --> 00:06:21,000 Por último vamos a poner aquí un 1. En teoría si nuestro simulador funciona 74 00:06:21,000 --> 00:06:25,000 bien tendría que encenderse con mayor intensidad. Os he advierto que TinkerCAD 75 00:06:25,000 --> 00:06:29,000 no es muy fino con esto. El efecto del voltaje se aprecia mucho mejor cuando 76 00:06:29,000 --> 00:06:33,000 utilizamos la placa de arduino en la realidad pero bueno nos sirve para 77 00:06:33,000 --> 00:06:36,000 comprobar que verdaderamente esto funciona. Una cosa importante a destacar 78 00:06:36,000 --> 00:06:41,000 es que la modulación de anchura de pulso se va a estar ejecutando continuamente 79 00:06:41,000 --> 00:06:46,000 desde el momento en que se llama a la función analogwrite y no va a cesar 80 00:06:46,000 --> 00:06:51,000 hasta que escribamos o leamos en digital el pin en cuestión. No es necesario 81 00:06:51,000 --> 00:06:55,000 estar llamando en bucle a la función analogwrite para que escriba a nivel 82 00:06:55,000 --> 00:06:59,000 alto, a nivel bajo, a nivel alto sino que una vez que se llama a la función esto 83 00:06:59,000 --> 00:07:03,000 lo hace la placa de arduino constantemente hasta que se le diga que 84 00:07:03,000 --> 00:07:08,000 se detenga. Bueno en esta práctica hemos utilizado la modulación de anchura de 85 00:07:08,000 --> 00:07:11,000 pulso para controlar la intensidad lumínica del led pero también podríamos 86 00:07:11,000 --> 00:07:15,000 utilizar esta técnica por ejemplo para controlar la velocidad de giro de un 87 00:07:15,000 --> 00:07:19,000 motor eléctrico. Ahora vamos a ver otras posibilidades que ofrecen los pines 88 00:07:19,000 --> 00:07:22,000 digitales de la placa de arduino. Si volvemos a la referencia de arduino 89 00:07:22,000 --> 00:07:27,000 encontraremos una función con el nombre de TORN. Esta función nos va a permitir 90 00:07:27,000 --> 00:07:31,000 cambiar la frecuencia que aparecen en los pines digitales que vimos 91 00:07:31,000 --> 00:07:37,000 anteriormente. La sintaxis es muy sencilla, el pin, la frecuencia y también 92 00:07:37,000 --> 00:07:42,000 cabe la posibilidad de indicar la duración del sonido. Bueno a continuación 93 00:07:42,000 --> 00:07:47,000 vamos a cambiar el circuito para que un zumbador produzca un sonido. Lo primero 94 00:07:47,000 --> 00:07:50,000 que vamos a hacer va a ser cambiarle el nombre, le vamos a llamar PIP. Vamos a 95 00:07:50,000 --> 00:07:57,000 quitar estos elementos del circuito y vamos a poner un zumbador. Lo tenemos por 96 00:07:57,000 --> 00:08:01,000 aquí, el que se llama piezo. Bueno como veis tiene un polo negativo y uno 97 00:08:01,000 --> 00:08:06,000 positivo. El negativo lo vamos a conectar a tierra, lo podemos hacer en esta parte 98 00:08:06,000 --> 00:08:12,000 aquí abajo, así. Y el positivo lo vamos a conectar al pin 10. Y ahora vamos con el 99 00:08:12,000 --> 00:08:17,000 código. Vamos a quitar el código de antes, que ya no lo necesitamos. Vamos a 100 00:08:17,000 --> 00:08:21,000 cambiar el nombre a la variable, ahora la vamos a llamar PINVACER y vamos a 101 00:08:21,000 --> 00:08:27,000 utilizar la función TORN, donde indicamos el pin sobre el que queremos actuar y la 102 00:08:27,000 --> 00:08:31,000 frecuencia que queremos escuchar. Nosotros vamos a emplear la frecuencia de 103 00:08:31,000 --> 00:08:35,000 440 hercios, que si alguien sabe de música pues se corresponde con el LA, 104 00:08:35,000 --> 00:08:41,000 con el que suelen afinar las orquestas. Bien, pues vamos a probar el circuito. 105 00:08:43,000 --> 00:08:47,000 Si tenemos puestos unos altavoces comprobaremos cómo efectivamente se 106 00:08:47,000 --> 00:08:51,000 produce un pitido continuo. Si queremos que este pitido tenga una duración 107 00:08:51,000 --> 00:08:57,000 determinada, por ejemplo un segundo, pues pondremos 1000 milisegundos. Ya sabéis 108 00:08:57,000 --> 00:09:03,000 que en Arduino se trabaja con milisegundos. Lo volvemos a simular 109 00:09:04,000 --> 00:09:09,000 y ahora escucharemos durante un segundo ese pitido y se acabará. Como lo tenemos 110 00:09:09,000 --> 00:09:13,000 en el setup y no estamos dentro del bucle de loop, pues sólo se ejecutará una vez, 111 00:09:13,000 --> 00:09:16,000 que es tal como hasta ahora queremos. Bueno, pues presta atención porque a 112 00:09:16,000 --> 00:09:20,000 partir de ahora te contaré lo que tienes que hacer en esta práctica. 113 00:09:20,000 --> 00:09:24,000 En este caso yo he entrado a Tinkercad con el perfil de un alumno igual que 114 00:09:24,000 --> 00:09:29,000 vosotros. Nos tendremos que ir a clases, seleccionar nuestra clase, entrar en la 115 00:09:29,000 --> 00:09:34,000 actividad de Melody y copiar y modificar el circuito. Aquí le vamos a poner el 116 00:09:34,000 --> 00:09:38,000 nombre de Melody. Vamos a quitar el copy off y si lo estamos haciendo en parejas, 117 00:09:38,000 --> 00:09:42,000 pues el nombre de los dos integrantes de la pareja. Vemos que tenemos un buzzer y 118 00:09:42,000 --> 00:09:45,000 ahora vamos a ver qué tenemos en el código. Vamos a hacerlo un poquito más 119 00:09:45,000 --> 00:09:49,000 grande para verlo mejor. Y bueno, pues tenemos una variable para nuestro pin 120 00:09:49,000 --> 00:09:53,000 del zumbador y dentro del setup llamamos a la función melodía que tenemos aquí 121 00:09:53,000 --> 00:09:58,000 debajo. Dentro del loop no tenemos nada. Es decir, esta función melodía sólo se 122 00:09:58,000 --> 00:10:02,000 va a ejecutar una vez, cuando se inicie Arduino. Bueno, dentro de la función 123 00:10:02,000 --> 00:10:07,000 melodía nos hemos declarado un array con el tipo de datos float, es decir, un 124 00:10:07,000 --> 00:10:11,000 array de números decimales como podemos ver aquí. Os recuerdo los números 125 00:10:11,000 --> 00:10:16,000 decimales en programación siempre van con el punto, no con la coma. Bueno, este 126 00:10:16,000 --> 00:10:20,000 sería un elemento, este sería otro... Lo que sí van separados por comas en los 127 00:10:20,000 --> 00:10:24,000 arrays son los distintos elementos. Bueno, como veis nos creamos el array e 128 00:10:24,000 --> 00:10:28,000 inicializamos sus valores. Eso lo hacemos empleando las llaves. A continuación 129 00:10:28,000 --> 00:10:32,000 tenemos otro array, pero en este caso de números enteros, indicando la duración 130 00:10:32,000 --> 00:10:35,000 de las notas. Estos dos arrays tienen que tener el mismo número de elementos 131 00:10:35,000 --> 00:10:40,000 porque cada nota tendrá asociado su duración. Fijaros que nos dicen que si 132 00:10:40,000 --> 00:10:45,000 queremos una redonda pondremos un 1, una blanca un 2, una negra un 4, una corchea 133 00:10:45,000 --> 00:10:50,000 un 8. Bueno, a continuación nos creamos una variable numNotas y le asignamos un 134 00:10:50,000 --> 00:10:55,000 valor que resulta ser, estos son detalles técnicos, el cálculo automático del 135 00:10:55,000 --> 00:10:59,000 número de elementos de los arrays. Bien, y ahora tenemos un bucle for en el 136 00:10:59,000 --> 00:11:04,000 que nos creamos una variable llamada notaActual y le asignamos el valor 0 en 137 00:11:04,000 --> 00:11:08,000 la que la condición que se debe cumplir para ejecutar el bucle es que la nota 138 00:11:08,000 --> 00:11:12,000 actual sea inferior al número de notas que nos calculamos anteriormente y aquí 139 00:11:12,000 --> 00:11:15,000 tendríamos la actualización de la variable notaActual que es la que me 140 00:11:15,000 --> 00:11:19,000 está controlando el bucle. Bueno, dentro del bucle nos creamos una variable 141 00:11:19,000 --> 00:11:23,000 duración de notas que le asignamos un valor de un segundo, milisegundos, 142 00:11:23,000 --> 00:11:28,000 dividido entre la duración de las notas. A continuación llamamos a la función 143 00:11:28,000 --> 00:11:33,000 tone, indicando el pin al que tenemos el zumbador, la frecuencia de la nota 144 00:11:33,000 --> 00:11:37,000 correspondiente, fijaros cómo utilizo el array y el índice, y la duración de la 145 00:11:37,000 --> 00:11:39,000 nota en particular. Para conseguir el efecto de que las notas no estén ligadas 146 00:11:39,000 --> 00:11:43,000 una a otra sino que haya una pequeña pausa entre notas, ese es el valor que 147 00:11:43,000 --> 00:11:47,000 utilizaremos para mantener la Arduino en espera. Y a continuación decimos que no 148 00:11:47,000 --> 00:11:50,000 emita ningún sentido con la función notTone, que no la hemos visto en la 149 00:11:50,000 --> 00:11:55,000 referencia de Arduino, pero lo que nos dice es que deja de ejecutar cualquier 150 00:11:55,000 --> 00:12:00,000 sonido. En realidad, como hemos puesto una duración, esta función no sería 151 00:12:00,000 --> 00:12:04,000 necesaria, pero bueno, tampoco pasa nada por ponerla. Bueno, pues vamos a ejecutar el 152 00:12:04,000 --> 00:12:08,000 programa y vamos a ver qué ocurre. 153 00:12:09,000 --> 00:12:13,000 Bueno, como hemos podido observar, se ha ejecutado una vez la melodía. Si queremos 154 00:12:13,000 --> 00:12:17,000 escucharla varias veces podemos hacer dos cosas, una detener la simulación y 155 00:12:17,000 --> 00:12:20,000 volverla a simular de nuevo, o en la placa de Arduino tenemos un botón de 156 00:12:20,000 --> 00:12:24,000 Reset, que es este de aquí. Si le pulsamos se resetea la placa y por 157 00:12:24,000 --> 00:12:29,000 tanto se volvería a ejecutar el setup. Vamos a probarlo. 158 00:12:30,000 --> 00:12:34,000 Bueno, pues en esta práctica lo que tendrás que hacer es, utilizando la tabla 159 00:12:34,000 --> 00:12:39,000 de frecuencias para las distintas notas que te la dejo en el águla virtual, en 160 00:12:39,000 --> 00:12:44,000 esta tabla podemos ver las distintas notas, aquí a la izquierda, y las 161 00:12:44,000 --> 00:12:49,000 distintas escalas que tenemos. Por ejemplo, como decía anteriormente, 440 se 162 00:12:49,000 --> 00:12:53,000 corresponde con la nota La de esta escala de aquí. Bueno, pues cógete la 163 00:12:53,000 --> 00:12:58,000 partitura de la melodía que tú quieras, asínale las frecuencias y la duración 164 00:12:58,000 --> 00:13:03,000 de las notas en estos Arrays y ejecuta tu propia melodía. Venga, sed originales. 165 00:13:03,000 --> 00:13:06,000 Hasta ahora.