1 00:00:05,160 --> 00:00:12,619 Buenas tardes, tengo otro esquema aquí con un nuevo elemento, que sería este de aquí, que es un servo. 2 00:00:12,919 --> 00:00:22,280 Vamos a hacer una introducción que es un servomotor. Un servomotor es un tipo especial de motor que permite controlar con precisión su posición angular. 3 00:00:23,199 --> 00:00:33,340 Normalmente iría entre 0 y 180 grados. A diferencia de un motor normal, no gira libremente, sino que se mueve exactamente hasta el ángulo que le indiquemos. 4 00:00:33,340 --> 00:00:51,159 Entonces, ¿en qué se usa? Se usa en robótica, se usa en brazos mecánicos, en puertas automáticas, en sistemas de orientación, cámaras, sensores, etc. En este circuito se utiliza un microservo tipo SG90, que es muy común en Arduino, que es este de aquí. 5 00:00:51,159 --> 00:00:56,479 Este servo sería el aspecto real 6 00:00:56,479 --> 00:00:58,280 En el que veis que tiene tres pines 7 00:00:58,280 --> 00:00:59,479 Y bueno, aquí tendríamos 8 00:00:59,479 --> 00:01:00,460 Este sería el motor 9 00:01:00,460 --> 00:01:02,420 Y aquí esto es lo que haría girar 10 00:01:02,420 --> 00:01:05,040 Pues esa palanca 11 00:01:05,040 --> 00:01:08,560 ¿Cómo funciona un servomotor? 12 00:01:08,879 --> 00:01:10,579 Internamente está formado 13 00:01:10,579 --> 00:01:10,900 ¿Por qué? 14 00:01:10,980 --> 00:01:11,760 Por un motor DC 15 00:01:11,760 --> 00:01:14,980 De corriente continua 16 00:01:14,980 --> 00:01:18,640 En el que hay un sistema de engranajes 17 00:01:18,640 --> 00:01:21,340 Y también estaría formado 18 00:01:21,340 --> 00:01:22,200 Por un potenciómetro 19 00:01:22,200 --> 00:01:25,980 para saber la posición, y un circuito de control interno. 20 00:01:26,340 --> 00:01:30,819 El servo no recibe un voltaje variable, sino que es una señal PWM, 21 00:01:30,819 --> 00:01:36,680 o sea, ya vimos en los pines, el PWM era modulación por ancho de pulso, 22 00:01:36,840 --> 00:01:38,120 enviada desde Arduino. 23 00:01:39,519 --> 00:01:42,400 Entonces, según el ancho de pulso, si el pulso es corto, 24 00:01:42,560 --> 00:01:47,359 pues el ángulo será pequeño, será cerca de 0 grados. 25 00:01:47,459 --> 00:01:51,480 Si el pulso es medio, pues sería la posición central, que sería 90 grados, 26 00:01:51,480 --> 00:01:55,959 y si el pulso es largo, pues el ángulo sería grande y sería hasta 180 grados. 27 00:01:56,859 --> 00:02:00,799 Necesitamos aquí una librería para codificarlo, que sería la servo.h 28 00:02:00,799 --> 00:02:09,219 y que se encarga de proporcionarnos una serie de métodos para poder mover ese servo. 29 00:02:09,900 --> 00:02:13,919 El servo va a tener tres cables que están aquí ya posicionados, 30 00:02:13,919 --> 00:02:20,219 en el que vemos aquí tiene una señal, uno que sería de potencia 31 00:02:20,219 --> 00:02:22,240 y otro que sería de tierra. 32 00:02:22,800 --> 00:02:25,340 El rojo es el de potencia, que sería alimentación 5 voltios. 33 00:02:25,539 --> 00:02:29,219 El negro sería el de GND, 0 voltios. 34 00:02:29,599 --> 00:02:33,219 Y luego el verde que pongo aquí, señal, sería la señal de control, 35 00:02:33,219 --> 00:02:37,520 que lo vamos a realizar siempre a través de un pin, como tenemos aquí. 36 00:02:39,039 --> 00:02:43,479 ¿Qué más? En cuanto a las conexiones, pues lógicamente este iría a un pin, 37 00:02:43,599 --> 00:02:47,259 este iría a 5 voltios y este iría a tierra. No hay mucho más. 38 00:02:47,259 --> 00:02:51,840 este sería el código que luego lo explicaré 39 00:02:51,840 --> 00:02:53,520 y si le damos a ejecutar 40 00:02:53,520 --> 00:02:59,340 veis el código lo que está haciendo es que cada cierto tiempo 41 00:02:59,340 --> 00:03:03,319 se le está proporcionando un valor desde el pin 2 42 00:03:03,319 --> 00:03:10,259 de un pulso pequeño, uno medio o uno grande 43 00:03:10,259 --> 00:03:14,879 para que recorra los 0, los 90 y los 180 grados 44 00:03:14,879 --> 00:03:26,860 Aquí tenemos el código y ahora lo que haremos es rehacerlo desde cero. 45 00:03:28,500 --> 00:03:35,039 La utilización de un servo es muy sencilla y vamos a hacer el proyecto desde cero. 46 00:03:38,340 --> 00:03:41,520 Voy a borrar todo esto y lo hacemos desde aquí. 47 00:03:41,520 --> 00:03:53,340 quitamos el código y luego lo ponemos vale nos traemos el servo desde aquí 48 00:03:53,340 --> 00:03:57,159 tenía tendríamos el micro servo que sería este de aquí yo lo que he hecho es 49 00:03:57,159 --> 00:04:02,319 que lo he girado para ponerlo en mejor posición a la hora de para que se puede 50 00:04:02,319 --> 00:04:05,780 utilizar este servo este servo se podría utilizar aquí poniéndonos una barrera y 51 00:04:05,780 --> 00:04:10,400 sería pues por ejemplo la barrera pues en un parking bien vamos a hacer las 52 00:04:10,400 --> 00:04:14,500 conexiones la señal vamos a ponerlo al pin 2 por ejemplo que lo que tenía puesto 53 00:04:14,500 --> 00:04:38,019 le dejamos de color verde y luego teníamos potencia que sería 5 voltios y el gnd que le 54 00:04:38,019 --> 00:04:46,540 vamos a llevar aquí que lo ponemos negro y ya estaría montaje el montaje es muy sencillo en 55 00:04:46,540 --> 00:04:55,220 cuanto al código ya lo tendría aquí y si vamos poco a poco lo que vamos haciendo que es primero 56 00:04:55,220 --> 00:04:57,680 va a utilizar una librería 57 00:04:57,680 --> 00:04:59,420 que sería servo.h 58 00:04:59,420 --> 00:05:01,339 ya vimos como se incluían 59 00:05:01,339 --> 00:05:03,220 librerías en C++ 60 00:05:03,220 --> 00:05:04,879 con entre estos dos ángulos 61 00:05:04,879 --> 00:05:07,439 y siempre era un fichero que era fichero cabecera 62 00:05:07,439 --> 00:05:09,399 que tenía una extensión .h 63 00:05:09,399 --> 00:05:11,180 y esta se va a llamar pues 64 00:05:11,180 --> 00:05:13,459 servo, bien a continuación 65 00:05:13,459 --> 00:05:15,519 lo que hacemos es que vamos a crear 66 00:05:15,519 --> 00:05:19,160 creamos un objeto de 67 00:05:19,160 --> 00:05:21,540 servo 68 00:05:21,540 --> 00:05:23,339 ese objeto servo que proviene de esta 69 00:05:23,339 --> 00:05:25,000 librería se llama miservo 70 00:05:25,000 --> 00:05:43,120 ¿Para qué? Para utilizar los métodos de ese objeto. Vamos a poner a continuación, vamos a decir aquí, que creo un objeto de tipo servo. 71 00:05:43,759 --> 00:05:57,550 Bien, hemos creado posteriormente, creamos una variable de tipo entera llamada ángulo, 72 00:05:57,769 --> 00:06:01,110 donde en un valor inicial le hemos dado un valor de cero, 73 00:06:01,209 --> 00:06:04,589 porque el servo le va a conferir por primero un ángulo de cero grados 74 00:06:04,589 --> 00:06:06,329 y luego irá pasando por los distintos ángulos. 75 00:06:07,129 --> 00:06:12,269 Si os fijáis en el setup, lo único que hemos hecho es que aquí, en esta línea, 76 00:06:12,269 --> 00:06:15,689 que la voy a escribir yo de nuevo, 77 00:06:18,050 --> 00:06:43,220 ¿Qué hemos hecho? Hemos puesto, vamos a borrarlo todo y lo vamos haciendo poco a poco, aquí en el setup, que es en la configuración, lo que vamos a ponerle, primero vamos a llamar al objeto que hemos creado, mi servo, y vamos a utilizar un método suyo, vamos a ponerlo esto bien, el método que vamos a utilizar es attach, 78 00:06:43,220 --> 00:06:58,339 Ese attach, que significa unir, lo que está haciendo es que relacionemos el objeto servo con uno de los pines, que sería el pin 2. 79 00:06:58,779 --> 00:07:07,800 Ese es el que hemos puesto aquí y es el que estará unido al pin del servo. 80 00:07:07,800 --> 00:07:16,660 con lo cual estamos uniendo que la señal proviene pues del del pin 2 y eso lo configuramos aquí 81 00:07:18,079 --> 00:07:39,459 bien vamos a ponerlo por ejemplo así indica que el servo está conectado al pin digital 82 00:07:39,459 --> 00:07:43,740 2. ¿Vale? ¿Qué tenemos después? Vamos a inicializar 83 00:07:43,740 --> 00:07:47,600 en el setup. Inicializamos el serial o el monitor 84 00:07:47,600 --> 00:07:51,079 en serie. ¿Qué os acordáis? Era serial y luego begin. 85 00:07:52,399 --> 00:07:55,899 Le ponemos un valor de 9600 86 00:07:55,899 --> 00:07:58,639 y ya habríamos inicializado 87 00:07:58,639 --> 00:08:02,579 la comunicación en serie. Vamos a ponerlo aquí. 88 00:08:05,649 --> 00:08:09,370 Se inicia la comunicación. 89 00:08:11,089 --> 00:08:13,370 en serie 90 00:08:13,370 --> 00:08:16,689 para mostrar 91 00:08:16,689 --> 00:08:18,310 los 92 00:08:18,310 --> 00:08:19,709 ángulos 93 00:08:19,709 --> 00:08:22,779 por pantalla 94 00:08:22,779 --> 00:08:24,860 vale 95 00:08:24,860 --> 00:08:27,360 bien, que más 96 00:08:27,360 --> 00:08:29,860 bien, ya aquí no tendríamos que 97 00:08:29,860 --> 00:08:31,860 poner absolutamente nada más y nos iríamos 98 00:08:31,860 --> 00:08:33,480 al loop, en el loop vamos a utilizar 99 00:08:33,480 --> 00:08:35,779 un bucle, un bucle para 100 00:08:35,779 --> 00:08:37,759 que vaya recorriendo cada 101 00:08:37,759 --> 00:08:39,179 uno de los ángulos 102 00:08:39,179 --> 00:08:41,879 eso como se va a hacer, lo escribo y luego 103 00:08:41,879 --> 00:08:43,220 lo explico, for 104 00:08:43,220 --> 00:08:47,860 ángulo, que es la variable que hemos 105 00:08:47,860 --> 00:08:49,759 creado antes, que tenía un valor de 0 106 00:08:49,759 --> 00:08:51,179 le vamos a poner aquí 0 107 00:08:51,179 --> 00:08:53,000 ángulo 108 00:08:53,000 --> 00:08:59,350 igual a 180 109 00:08:59,350 --> 00:09:01,350 y ángulo 110 00:09:01,350 --> 00:09:08,970 y le vamos a poner 111 00:09:08,970 --> 00:09:09,529 aquí 112 00:09:09,529 --> 00:09:11,730 30 113 00:09:11,730 --> 00:09:19,620 vale, miservo 114 00:09:19,620 --> 00:09:22,639 punto write 115 00:09:22,639 --> 00:09:31,330 ángulo, y luego ya pues 116 00:09:31,330 --> 00:09:40,870 nada más que el serial, el punto print y vamos a imprimir los ángulos. Aquí vamos 117 00:09:40,870 --> 00:10:09,659 a poner ángulo, los puntos comillas y lo copiamos tres veces, copiar, no lo he copiado 118 00:10:09,659 --> 00:10:15,919 Y aquí vamos a poner, bueno, nos haría falta más que uno. 119 00:10:16,820 --> 00:10:18,279 Y aquí pondríamos la variada de ángulo. 120 00:10:22,190 --> 00:10:26,809 Vamos a poner un println para que haga un retorno de carro. 121 00:10:26,809 --> 00:10:36,710 Y por último, un delay para que lo haga cada una de las veces, cada una serie de milisegundos. 122 00:10:36,830 --> 00:10:37,429 Vamos a poner 800. 123 00:10:38,529 --> 00:10:39,950 Bien, ¿qué tenemos aquí? 124 00:10:39,950 --> 00:10:47,690 Y esto es un bucle, un bucle for, que consta de tres partes. 125 00:10:47,690 --> 00:11:02,309 Si veis aquí, un bucle for consta de una inicialización, una condición y un incremento. 126 00:11:04,889 --> 00:11:06,850 Esto sería el bucle for. 127 00:11:06,850 --> 00:11:12,690 fijaos, el for 128 00:11:12,690 --> 00:11:14,730 viene entre dos llaves 129 00:11:14,730 --> 00:11:16,309 una de apertura y una de cierre 130 00:11:16,309 --> 00:11:17,850 que aquí no he puesto 131 00:11:17,850 --> 00:11:20,529 vamos a ponerle aquí 132 00:11:20,529 --> 00:11:23,570 ahí 133 00:11:23,570 --> 00:11:27,809 ya sale correcto 134 00:11:27,809 --> 00:11:30,610 veis, el bucle for es esta estructura 135 00:11:30,610 --> 00:11:31,970 que va desde este 136 00:11:31,970 --> 00:11:34,529 llave de apertura y esta 137 00:11:34,529 --> 00:11:36,330 de cierre, y esto que hay dentro 138 00:11:36,330 --> 00:11:38,289 lo va a leer una serie de veces 139 00:11:38,289 --> 00:11:39,690 es un bucle como este loop 140 00:11:39,690 --> 00:11:41,990 que era un bucle infinito, pero este no es infinito en este caso 141 00:11:41,990 --> 00:11:53,710 Bueno, lo va a hacer de manera que a través de estos dos paréntesis dentro tenemos tres partes separadas entre punto y coma 142 00:11:53,710 --> 00:11:56,129 Vamos a ponerlo con la misma estructura para que lo entendáis 143 00:11:56,129 --> 00:11:59,529 Esto sería un punto y coma y esto sería un punto y coma 144 00:11:59,529 --> 00:12:03,649 Y esto, esto y paréntesis es lo que es la cabecera del for 145 00:12:03,649 --> 00:12:07,009 La primera parte que sería esta es una inicialización 146 00:12:07,009 --> 00:12:11,710 Estamos diciendo, oye, el ángulo que hemos puesto creado aquí en principio va a valer cero 147 00:12:11,710 --> 00:12:13,490 Y va a empezar desde el 0. 148 00:12:14,370 --> 00:12:17,809 Después habrá una condición y lo comprobará en el FOR. 149 00:12:17,889 --> 00:12:21,590 Cada vez que pase por aquí va a comprobar si el ángulo es menor o igual que el 180. 150 00:12:22,009 --> 00:12:28,350 Si lo es, entonces lo que hará es que incrementará el ángulo 30 grados. 151 00:12:28,710 --> 00:12:32,629 Cogerá esto es igual que poner ángulo igual a ángulo más 30. 152 00:12:33,429 --> 00:12:36,129 Podríamos ponerlo igual así, si os queda más claro. 153 00:12:39,379 --> 00:12:40,039 Más 30. 154 00:12:40,039 --> 00:12:42,279 por lo tanto inicializa el ángulo a 0 155 00:12:42,279 --> 00:12:44,620 luego mira, comprueba si el ángulo 156 00:12:44,620 --> 00:12:46,840 es igual o menor a 180 grados 157 00:12:46,840 --> 00:12:48,720 y después le incrementa 158 00:12:48,720 --> 00:12:50,720 si lo es, le incrementa a 30 grados 159 00:12:50,720 --> 00:12:54,519 una vez que ha comprobado esto 160 00:12:54,519 --> 00:12:56,200 en un principio entrará en el for 161 00:12:56,200 --> 00:12:58,639 verá que el ángulo es 0 y es menor que 180 162 00:12:58,639 --> 00:12:59,779 porque es 0 163 00:12:59,779 --> 00:13:02,419 entonces lo que hará es que 164 00:13:02,419 --> 00:13:03,720 entrará dentro del bloque for 165 00:13:03,720 --> 00:13:05,860 llamaremos al método write de mi servo 166 00:13:05,860 --> 00:13:06,639 que es para que 167 00:13:06,639 --> 00:13:11,379 le confiera a mi servo un valor de cero, 168 00:13:11,639 --> 00:13:14,259 el valor que corresponda con esta variable, 169 00:13:14,460 --> 00:13:17,879 que como en principio es cero, le va a dar un valor de cero grados. 170 00:13:18,639 --> 00:13:20,879 Y después lo que haremos es que imprimiremos Arduino, 171 00:13:21,220 --> 00:13:24,879 o sea, Arduino ángulo, y detrás del ángulo tendríamos el qué, 172 00:13:24,980 --> 00:13:27,039 el valor de ese ángulo que realmente es un cero. 173 00:13:27,679 --> 00:13:30,500 Ahora espera 80 milisegundos y vuelve otra vez al for. 174 00:13:30,500 --> 00:13:33,179 que lo que ahora lee 175 00:13:33,179 --> 00:13:38,799 primero se habrá incrementado el ángulo en 30 grados 176 00:13:38,799 --> 00:13:44,480 y siempre que el ángulo sea menor o igual que 160 grados 177 00:13:44,480 --> 00:13:45,620 lo incrementa en 30 grados 178 00:13:45,620 --> 00:13:47,120 y ahora ángulo es 30 grados 179 00:13:47,120 --> 00:13:48,100 imprimirá 30 180 00:13:48,100 --> 00:13:50,659 que hará que el servo se ponga en 30 grados 181 00:13:50,659 --> 00:13:53,220 y lo imprimiremos en el monitor en serie 182 00:13:53,220 --> 00:13:54,879 a través de estas dos líneas 183 00:13:54,879 --> 00:13:59,679 se establece otra pausa de 800 milisegundos 184 00:13:59,679 --> 00:14:05,240 que sería casi un segundo y llega otra vez al for ahora le vuelve a incrementar y ahora que 185 00:14:05,240 --> 00:14:11,860 tendríamos tendríamos un valor de 60 grados el menos que 180 si entonces le confiero le confiere 186 00:14:11,860 --> 00:14:16,980 al servo un valor de 60 grados y lo que hace es que se pondrá en el servo en una posición de 60 187 00:14:16,980 --> 00:14:23,100 grados así sucesivamente hasta que llegue a 180 cuando llega a 180 como ya no cumple el for ya 188 00:14:23,100 --> 00:14:28,440 no entra dentro del for sale y entonces volverá otra vez al loop y lo hará de nuevo otra vez y 189 00:14:28,440 --> 00:14:35,639 así infinitas veces veis hay un bucle dentro de otro bucle un bucle que lo realiza este bucle se 190 00:14:35,639 --> 00:14:41,059 va a realizar cuántas veces los valores que va a tener que va a pasar el bucle van a ser de ángulo 191 00:14:42,440 --> 00:14:48,220 qué valor va a tener en principio tener a cero luego tendrá un valor de 30 grados luego tendrá 192 00:14:48,220 --> 00:15:02,460 uno de 60, de 90, de 120, luego de 150, luego de 180 y cuando llega a 180 le conferirá ese valor 193 00:15:02,460 --> 00:15:12,139 de 180 al servo pero cuando pase al siguiente que sería 210 como ya no cumple este for no entrará 194 00:15:12,139 --> 00:15:17,879 él y en ir al loop volverá otra vez aquí y empezará otra vez de cero con lo cual este 195 00:15:17,879 --> 00:15:32,100 no se lo va a proporcionar al trigger y volverá a realizar esta secuencia secuencia se repite 196 00:15:33,419 --> 00:15:43,620 infinitas veces por él el propio método loop veis un bucle dentro de otro bucle bien vamos 197 00:15:43,620 --> 00:15:44,960 a ejecutarlo 198 00:15:44,960 --> 00:15:50,350 y ya lo está haciendo 199 00:15:50,350 --> 00:15:52,269 si le damos al monitor en serie vamos a 200 00:15:52,269 --> 00:15:53,870 conmover esto para que lo veamos 201 00:15:53,870 --> 00:15:56,269 veis todos los valores que va 202 00:15:56,269 --> 00:15:58,230 proporcionando va leyendo el for 203 00:15:58,230 --> 00:16:00,090 0, 30, 60, 90, 120 204 00:16:00,090 --> 00:16:02,309 150 y 180 como ya no 205 00:16:02,309 --> 00:16:03,950 cumple el for empezaría 206 00:16:03,950 --> 00:16:06,309 recorre otra vez el loop y empezaría de nuevo 207 00:16:06,309 --> 00:16:08,169 veis lo está la secuencia de valores 208 00:16:08,169 --> 00:16:10,190 de ángulos y esos ángulos se lo está 209 00:16:10,190 --> 00:16:11,990 a través del método 210 00:16:11,990 --> 00:16:13,769 write 211 00:16:13,769 --> 00:16:22,409 se lo está pasando a través del pin 2 al servo para que el servo se mueva en esas distintas posiciones o distintos ángulos.