1 00:00:04,849 --> 00:00:20,250 Buenas tardes, tengo otro esquema aquí en el que he añadido un LCD I2C, o sea, ya hemos dado el LCD I2C y tampoco voy a hablar demasiado sobre él. 2 00:00:20,250 --> 00:00:28,050 aquí tenemos un servo y también hemos hablado del componente y ahora lo que quiero es unificar los dos 3 00:00:28,050 --> 00:00:38,490 y hacer un esquema utilizando la lectura en vez de a través del monitor de serie de los ángulos que aparezcan en el LCD I2C 4 00:00:38,490 --> 00:00:45,469 en cuanto a la estructura del esquema 5 00:00:45,469 --> 00:00:54,729 si veis he añadido tanto la parte del LCD 6 00:00:54,729 --> 00:00:57,270 a través de sus cuatro pines con la placa de arduino 7 00:00:57,270 --> 00:01:02,229 y los tres pines del servo también con la placa de arduino 8 00:01:02,229 --> 00:01:04,629 en resumen, ¿qué he hecho aquí? 9 00:01:04,950 --> 00:01:08,310 si veis, primero he creado dos puentes 10 00:01:08,310 --> 00:01:14,310 uno entre estas dos líneas de masa y otro puente entre las dos líneas de alimentación. 11 00:01:15,129 --> 00:01:19,189 ¿Para qué? Para tener las dos funcionando, porque estas dos líneas, 12 00:01:19,590 --> 00:01:25,650 una la he alimentado a través del GND de la placa de arduino y otra a través de los 5 voltios. 13 00:01:25,909 --> 00:01:30,390 Una vez que estas dos líneas han establecido el circuito, 5 voltios, 0 voltios, 14 00:01:30,870 --> 00:01:35,829 se comunican a través de estos dos puentes para que pueda utilizar también las dos líneas de abajo. 15 00:01:35,829 --> 00:01:45,950 Por lo tanto, si 5 voltios proviene de la placa de Arduino y llega hasta aquí, con el puente, me está llegando también hasta aquí para que pueda luego alimentar al servo. 16 00:01:45,950 --> 00:02:05,810 Acordaos que el servo tenía tres pines, uno era el de potencia, entonces estamos alimentando en ese recorrido que he dicho hasta el servo y también estamos alimentando a través de aquí el VCC del LCD para que también le llegue alimentación. 17 00:02:05,829 --> 00:02:23,939 La línea de tierra del LCD también está alimentada aquí, lo veis, se uniría a la del GND y la del GND del servo, que era esta, está alimentada a través de la línea de abajo, a través de este puente que he creado. 18 00:02:23,939 --> 00:02:26,560 bien, ya tenemos todo el circuito 19 00:02:26,560 --> 00:02:32,560 lo único que nos quedaría serían los dos pines del LCD y el pin del servo 20 00:02:32,560 --> 00:02:36,439 el pin del servo va concretamente hasta el pin digital número 9 21 00:02:36,439 --> 00:02:38,159 le veis, sería esta señal 22 00:02:38,159 --> 00:02:43,860 y luego los dos, el SDA y el SCL del LCD y 2C 23 00:02:43,860 --> 00:02:47,840 tanto el de datos va al pin analógico 4, eso era siempre así 24 00:02:47,840 --> 00:02:57,060 y el serial clock iba al analógico A5 25 00:02:57,060 --> 00:03:00,180 y con esto estaría todo el circuito 26 00:03:00,180 --> 00:03:02,800 no hace falta que lo haga de cero 27 00:03:02,800 --> 00:03:06,900 porque ya lo hemos dado y no tiene una gran dificultad 28 00:03:06,900 --> 00:03:10,680 bien, una vez que está todo configurado 29 00:03:10,680 --> 00:03:13,860 vamos a darle a ejecutar para ver qué es lo que hace 30 00:03:13,860 --> 00:03:18,520 y estáis viendo que nos está comunicando 31 00:03:18,520 --> 00:03:23,500 Cuando se pone a 90 grados, cuando se pone a 180 grados, cuando se pone a 0 grados, etc. 32 00:03:23,680 --> 00:03:25,800 Y así lo hace en bucle de manera infinita. 33 00:03:26,620 --> 00:03:28,539 Bien, vamos a ver el código en que consiste. 34 00:03:28,939 --> 00:03:32,780 Tendríamos que el código sería todo este y vamos a verlo por partes. 35 00:03:33,539 --> 00:03:41,669 Por lo tanto, lo voy a cortar y lo vamos a hacer desde cero. 36 00:03:42,789 --> 00:03:51,250 Vamos a poner el código poco a poco para que no tenga que escribirlo por completo 37 00:03:51,250 --> 00:03:53,569 y vamos explicando cada parte. 38 00:03:54,150 --> 00:04:03,330 bien lo primero que hemos hecho es he añadido las dos librerías acordados wire y liquid cristal y 39 00:04:03,330 --> 00:04:11,009 2c de lcd para poder utilizar sus métodos y luego hemos añadido otra librería que era servo punto h 40 00:04:11,009 --> 00:04:16,949 que era la librería del servo esto ya lo vimos en los dos vídeos anteriores que explicaban tanto el 41 00:04:16,949 --> 00:04:31,410 lcd como el servo a continuación lo único que hemos hecho aquí sería crear el objeto un liquid 42 00:04:31,410 --> 00:04:40,029 cristal y 2c llamado lcd acordados en el que se creaba con tendríamos que el lcd que utilizábamos 43 00:04:40,029 --> 00:04:45,230 Vamos a ir al PCF 8574 y la dirección era 35, por eso sería 35. 44 00:04:45,889 --> 00:04:50,649 Y luego el tipo de LCD, que eran 16 columnas por dos filas. 45 00:04:50,829 --> 00:04:52,990 Esos eran los tres parámetros que tenía este objeto. 46 00:04:53,730 --> 00:04:58,509 Bien, hemos establecido ya la dirección y las 16 columnas y las dos filas. 47 00:04:59,290 --> 00:05:09,439 A continuación, tenemos, creamos también, aparte de crear un objeto en líquido cristal, 48 00:05:09,439 --> 00:05:13,379 tenemos que crear un objeto servo que provendrá de la librería de servo.h. 49 00:05:13,839 --> 00:05:17,100 Ese objeto servo le vamos a llamar miservo. 50 00:05:17,980 --> 00:05:23,079 A continuación hemos creado una variable, 51 00:05:23,579 --> 00:05:33,519 creamos la variable de tipo entera ángulo. 52 00:05:34,579 --> 00:05:37,579 Esta variable lo que... y la inicializamos a un valor de cero. 53 00:05:37,579 --> 00:05:45,600 Esta variable va a alojar cada uno de los ángulos que va a aparecer en el LCD y que vamos a conferir al siervo, tanto 0, 90 como 180 grados. 54 00:05:46,500 --> 00:05:53,949 Bien, ya tenemos hasta aquí y vamos a configurar primero el voice setup. 55 00:05:56,290 --> 00:06:05,149 El voice setup, lo primero que hacemos es inicializar el LCD, lo vimos en el vídeo del LCD, se hacía a través del método init, 56 00:06:05,149 --> 00:06:11,470 le inicializábamos y le conferíamos el backlight, que os acordaos que es la luz de fondo que tiene el propio LCD. 57 00:06:11,910 --> 00:06:18,269 Estos dos métodos son de tipo Liquid Crystal y 2C y hemos utilizado los dos métodos para inicializar el LCD. 58 00:06:18,750 --> 00:06:20,769 Por otro lado, también hemos inicializado el servo. 59 00:06:21,250 --> 00:06:33,310 Acordaos, cuando con el objeto MiServo le aplicábamos el método Attach y para configurarle en este pin del servo 60 00:06:33,310 --> 00:06:35,730 tenía que ir enlazado a un pin digital. 61 00:06:35,730 --> 00:06:49,829 En este caso lo hemos enlazado al pin 9 y este es el que le va a conferir o le va a escribir, como queramos llamarlo, le va a indicar que ángulo tiene que adquirir el propio servo. 62 00:06:53,660 --> 00:07:00,860 A continuación, una vez que ya tenemos configurado el LCD y tenemos configurado el servo, tenemos el mensaje inicial que va a aparecer en el LCD. 63 00:07:00,860 --> 00:07:06,639 primero acordaos primero que se hacía se hacía se colocaba el cursor se utilizaba el método set 64 00:07:06,639 --> 00:07:11,899 cursor y se le decía que se posicionará aquí hemos dicho en el 00 pues está posicionando en 65 00:07:11,899 --> 00:07:17,600 este rectángulo de aquí una vez que se posicionaba en esa posición le decíamos que aquí que imprima 66 00:07:17,600 --> 00:07:24,980 servo más lcd como un título que aparecerá en esta fila de aquí y a continuación pasábamos 67 00:07:24,980 --> 00:07:33,740 el cursor con setCursor que aparecerá aquí a la posición 0 1 o sea en la columna 0 pero en la 68 00:07:33,740 --> 00:07:41,360 fila 1 en este rectángulo y a partir de aquí va a escribir iniciando le conferimos un retraso o una 69 00:07:41,360 --> 00:07:46,600 pausa de un segundo y medio acordaos delay era en milisegundos como son 1500 milisegundos es un 70 00:07:46,600 --> 00:07:53,660 segundo y medio y después de esos de ese segundo y medio le decimos que limpie la pantalla si 71 00:07:53,660 --> 00:08:06,399 ejecutamos esto de aquí nos dice que la cabecera tiene errores a ver bueno en principio lo que 72 00:08:06,399 --> 00:08:14,439 tiene de error es que no tiene el void loop vamos a ponerlo pero es que no quería ponerlo 73 00:08:14,439 --> 00:08:17,879 le vamos a poner vacío y luego ya lo rellenaremos vamos a darle a ejecutar 74 00:08:20,439 --> 00:08:54,220 y algo hemos puesto mal aquí está esto bien lcd backlight voy a poner todo el código vale 75 00:08:54,220 --> 00:09:27,940 A ver. Bien. Si le hemos llamado a la función, si yo quito todo esto y cerramos la llave, no debería dar ningún problema. Vale. ¿Veis? El loop no lo hemos rellenado. Creo que es que antes no he puesto void, pero ya estaría. 76 00:09:27,940 --> 00:09:42,740 ¿Qué tenemos? ¿Veis? Hemos incluido las librerías, hemos creado los dos objetos, servo y lcd, hemos creado una variable entera que sea ángulo inicializado a un valor de cero y hemos inicializado el lcd para que se vea la luz y se inicialice. 77 00:09:42,740 --> 00:09:51,379 hemos unido al objeto mi servo el pin 9 y hemos inicializado poniendo primero en la fila de arriba 78 00:09:51,379 --> 00:09:56,799 servo más lcd y el abajo iniciando y espera un segundo y medio y lo limpia veis es lo que ha 79 00:09:56,799 --> 00:10:02,600 hecho otra vez a ejecutar y veis aparece las dos líneas que hemos indicado y cuando pasa un segundo 80 00:10:02,600 --> 00:10:10,120 y medio lo borra si yo le pongo aquí tres segundos y medio pues vamos a pararlo lo pausará tres 81 00:10:10,120 --> 00:10:14,399 segundos y medio y vamos viendo durante tres segundos y medio ese mensaje que aparece en el 82 00:10:14,399 --> 00:10:24,259 lcd veis tarda más hasta que se borra con el método clear bien vamos a pasar al método loop 83 00:10:24,259 --> 00:10:43,809 vale bien que nos queda nos quedaría el método loop y luego una función que ha creado aquí voy 84 00:10:43,809 --> 00:10:49,149 a hablar de ella que esta es función para mostrar los datos en el lcd la función le llaman mostrar 85 00:10:49,149 --> 00:10:54,769 estado y la va a llamar en el loop esa función que hace lo primero que hace veis limpia la pantalla 86 00:10:54,769 --> 00:11:02,590 posiciona el cursor en la posición 00 aquí a continuación imprime ángulo servo luego pone 87 00:11:02,590 --> 00:11:13,250 el cursor en la posición 01 que sería esta de aquí imprime el valor del ángulo de la variable 88 00:11:13,250 --> 00:11:20,750 ángulo, el que le hayamos añadido y por último aparecerá grados, o sea que aquí aparecerá ángulo 89 00:11:20,750 --> 00:11:26,809 servo, el valor del ángulo seguido de grados, que serían las unidades. Esa sería la función que vamos 90 00:11:26,809 --> 00:11:32,269 a llamar en el loop. Y en el loop ¿qué tenemos? Lo primero que hace es que inicializa el ángulo a 91 00:11:32,269 --> 00:11:37,990 cero, lo veis, aquí estaría, en el loop este lo va a repetir de manera infinitas veces, con lo cual 92 00:11:37,990 --> 00:11:48,110 Servo más LCD iniciando solo aparece una vez, lo limpia y luego aquí en el loop va a aparecer cada uno de los grados, va a aparecer infinitas veces. 93 00:11:48,549 --> 00:11:54,809 Y va a recorrer, si veis, aquí hay tres partes, una con 0 grados, otra con 90 grados y otra con 180 grados. 94 00:11:54,809 --> 00:12:01,970 O sea que primero va a imprimir en LCD que el servo se ha puesto a 0 grados, luego a 90 y luego a 180. 95 00:12:01,970 --> 00:12:07,970 como lo hacemos primero el ángulo le dice que va a tener un valor de cero a continuación en 96 00:12:07,970 --> 00:12:15,990 el objeto de servo que se llamaba mi servo le va a escribir o le va a indicar que es un valor a 97 00:12:15,990 --> 00:12:24,850 través del pin 9 de 0 ángulo 0 pues de 0 para que el servo se ponga en una posición de 0 grados y a 98 00:12:24,850 --> 00:12:29,629 continuación lo que hace es llamar a mostrar estado al llamar a mostrar estado le está 99 00:12:29,629 --> 00:12:39,929 diciendo que imprima en el LCD en todo el ángulo servo y debajo 0 grados. Una vez que ha hecho la 100 00:12:39,929 --> 00:12:46,250 primera parte del loop a continuación espera un segundo y medio y pasaría a 90 grados que lo que 101 00:12:46,250 --> 00:12:52,450 hace ahora ángulo le pone un valor de 90 le dice al servo que adquiera ese valor de 90 grados que 102 00:12:52,450 --> 00:12:57,370 se posicione en 90 grados y después llama a la función mostrar estado. La función mostrar estado 103 00:12:57,370 --> 00:13:04,370 imprime ángulo servo y 90 grados y una vez que ha terminado vuelve aquí y espera un segundo y medio 104 00:13:04,370 --> 00:13:12,370 lo mismo para la tercera parte del loop que sería ahora la ángulo le pone un valor de 180 grados 105 00:13:12,370 --> 00:13:18,809 a servo le dice que se ponga en una posición de 180 grados y luego llama a la función mostrar estado 106 00:13:18,809 --> 00:13:26,830 que lo que hace es limpiar pantalla escribir en la posición 00 ángulo servo y en la posición 01 180 grados 107 00:13:26,830 --> 00:13:32,269 espera otro segundo y medio y terminaría el loop iría otra vez al loop y lo recorrería de otra 108 00:13:32,269 --> 00:13:39,230 otra vez pasando por 0 90 y 180 terminaría y volvería otra vez y así infinitas veces hasta 109 00:13:39,230 --> 00:13:46,070 que paremos o detengamos la simulación y esto sería el código es un poco largo pero el código 110 00:13:46,070 --> 00:13:55,429 no es demasiado complicado si le damos a iniciar lo que va a hacer en principio en base pone la 111 00:13:55,429 --> 00:14:07,330 primera parte y luego ya va recorriendo con ángulo servo 0 180 0 90 180 grados 0 90 180 grados veis 112 00:14:07,330 --> 00:14:12,610 infinidad de veces esto se corresponde con el servo porque al mismo tiempo estamos haciendo 113 00:14:12,610 --> 00:14:22,870 que el servo pase por 0 por 90 y por 180 grados veis y conforme el servo pasa por esos tres 114 00:14:22,870 --> 00:14:28,429 distintos grados, se lo va comunicando al LCD y van apareciendo impresos aquí.