Bienvenidos en esta clase vamos a ver cómo determinar el sentido de giro del eje de nuestro motor.
Entonces vamos a trabajar con esa parte y vamos a ver en base a esta tabla cómo podemos determinar ese
sentido de giro.
Entonces, para determinar este sentido de giro, vamos a tomar como referencia el desplazamiento que
existe entre las señales A y B.
Recuerden que estaban desfasadas 90 grados.
Entonces, el hecho que vamos a trabajar con estos dos canales A y B nos va a llevar a cuatro estados
o cuatro combinaciones, como lo podemos ver en la parte de acá en esta tabla.
Entonces ahí tenemos las cuatro combinaciones posibles.
Entonces, en base a eso, nosotros vamos a determinar en que sentido está girando el eje de nuestro
motor.
Entonces, como pueden ver aquí, vamos a asumir que la salida a, es decir, el canal A va a ser considerado
como el bit más significativo y el canal B como el dígito menos significativo, como lo podemos ver
acá.
Entonces, en base a esta tabla de verdad que tenemos aquí, vamos a saber la dirección de giro.
Si comparamos el estado actual con el estado anterior, podemos ver aquí una pequeña tabla.
Podemos ver que aquí si el estado anterior como podemos ver era cero cero y el estado actual es cero
uno.
Entonces como va?
Aparace hacia arriba.
Entonces ahí podemos ver que nuestro motor está girando en sentido antihorario.
Pues vamos a ver eso de acá tenemos nuestro motor y siempre va a ser positivo.
Cuando gire en sentido antihorario y negativo, cuando gire en sentido horario, entonces vamos a tomar
como esos signos.
Entonces, en base a esto, nosotros podemos armar esta tabla de acá que podemos ver aquí.
Entonces, como podemos ver si en cambio ahora el estado como podemos ver actual es cero cero y el anterior
era cero uno.
Coven va hacia abajo.
Entonces ahí está, girando en sentido horario.
Entonces vamos a ver esta tabla de acá que lo indica de mejor manera.
Entonces tenemos como ven acá la combinación A B tenemos cero cero cero uno uno cero y uno uno.
Y acá tenemos su valor en decimal.
De igual manera lo tenemos acá.
El valor decimal, en este caso para el estado anterior y acá el estado actual.
Entonces, eh.
Cómo hacemos esto?
Como pueden ver aquí, si el estado anterior, en este caso, como podemos ver acá tenemos el estado
anterior es igual, por ejemplo, a cero cero.
Y el estado actual es cero cero.
Entonces tenemos aquí que no afecta en nada, pero si tenemos cero uno, podemos ver que tenemos un
incremento de +1.
Entonces podemos ver ahí.
Y también tendríamos incremento si el estado anterior vale 2 y el estado actual vale cero cero.
Entonces tendríamos un incremento.
Entonces vamos a tener como bien cuatro incrementos, cuatro combinaciones que en nuestro encoder va
a incrementar, indicando que nuestro e eje del motor está girando en sentido antihorario.
Y caso contrario, podemos ver si es negativo, va a girar en sentido horario, entonces podemos de
las combinaciones.
Por ejemplo, si la anterior el estado anterior es cero uno, entonces tenemos menos uno.
Si el estado actual es cero cero, podemos ver acá otra combinación.
Si el estado anterior vale cero y el estado actual vale.
En este caso uno cero, podemos ver aquí o dos en decimal.
Entonces tenemos e decremento.
Entonces, como pueden ver, vamos a tener estas combinaciones que tenemos acá.
Entonces con esto podemos armar ya la parte de codificación para determinar si nuestro motor está girando
en un sentido o en el otro.
Entonces aquí e lo que vamos a ver en esta gráfica, en esta matriz, podemos ver ahí un pequeño ejemplo.
Les invito a leer este archivo para que lo puedan entender de mejor manera.
Y también aquí menciona como pueden observar que vamos a tener una parte que marcamos como e.
En este caso estas combinaciones que tenemos aquí como eh no son posibles.
Entonces en este caso eh nos muestra que existe un error en nuestro encoder.
Entonces ahí si cae en esta, en esta parte de aquí.
Como pueden ver en estas combinaciones, vamos a tener un problema con el encoder.
Entonces ahí, eh?
Podría ser que tiene algún problema, algún daño interno, por lo cual me está lanzando estas combinaciones.
Entonces es una manera también de determinar si nuestro encoder está funcionando bien o no está funcionando
bien.
Entonces vamos a ver cómo programar esta matriz que tenemos acá.
Vamos a ver como programar en Arduino.
Entonces vamos a Arduino y aquí en Arduino vamos a hacer lo siguiente.
Acá ya tenemos un archivo creado y lo que vamos a hacer es lo siguiente Vamos a ingresar primero los
pines que vamos a utilizar para las entradas de los canales A y B.
Entonces recuerden que el canal A es el dígito más significativo.
Entonces vamos a ubicar aquí constan una constante de tipo entero y la variable podemos poner aquí como
canal, o sea, pero en este caso voy a trabajar con los pines que tiene.
El encoder, entonces aquí podemos observar.
Vamos a ver, ahí tenemos una nomenclatura en nuestros pines.
Ahí vamos a ver si la acercamos de mejor manera, podemos ver que tenemos nomenclaturas.
Entonces vamos a trabajar con estas nomenclaturas que tenemos acá.
Entonces el canal A es el C1 y esto lo vamos a agregar al pin 3.
Luego tenemos acá otro pin.
Vamos a llamarlo como C2, que sería el canal B.
Y este va a ser un dígito menos que la anterior.
Recuerden que el canal es el dígito más significativo.
Entonces aquí va a ir 2.
Entonces vamos a agregar punti coma y listo.
Ahora, por qué elegí estos pines de Arduino?
Elegí estos pines debido a que vamos a leer pulsos y la manera correcta de leer pulsos en Arduino es
utilizar interrupciones.
Entonces los pines de interrupciones de Arduino son la 3 y la 2, pero luego vamos a ver que vamos a
necesitar mucho más pines dependiendo del robot que se vaya a armar.
Vamos a necesitar otros dos pines para otro motor en este caso.
Entonces, he aquí es como ven, Arduino solamente tiene dos e interrupciones externas, sin embargo,
e también posee interrupciones especiales, llamadas pinchen, que lo podemos utilizar con una librería
y van a ver que se puede utilizar de la misma manera que vamos a utilizar estas interrupciones externas
que tenemos aquí.
Entonces, una vez aclarado esto, vamos a ver lo siguiente Vamos a ver la parte de incremento o decremento
dependiendo, dependiendo de cómo estén las combinaciones de la tabla que vimos anteriormente.
Vamos a crear una variable donde vamos a almacenar estos incrementos o de excrementos y luego vamos
a agregar también una variable de tipo bit para el estado anterior.
Vamos a inicializar con 0 y también una variable bits para el instante actual para realizar la comparación
que vimos en la tabla.
Ahora, usualmente nosotros vamos a trabajar esto en un tiempo de muestreo, es decir, vamos a correr
en un tiempo de muestreo constante.
Por ejemplo, vamos a trabajar en 100 milisegundos, que es lo que usualmente se trabaja en robótica.
Entonces necesitamos variables de tiempo para determinar ese tiempo de muestreo.
Entonces vamos a crear aquí las siguientes variables de tipo long sin signo a tener aquí signes long.
Listo.
Y vamos a llamar esto.
Las Time es una variable que vamos a utilizar para la parte de tiempo de muestreo y también vamos a
ingresar ese tiempo de muestreo.
Vamos a poner aquí una variable para poder ingresar el tiempo de muestreo que vamos a ponerlo como sample
cine y como les mencionábamos, a trabajar con 100 milisegundos.
Listo.
Una vez que hemos hecho nos vamos acá al Bait Setup y lo que vamos a hacer es declarar e inicializar
el puerto serial.
Vamos a inicializar y vamos a trabajar con una velocidad de de nueve mil seiscientos vatios.
Vamos a ingresar acá una vez inicializado esto e vamos aquí a configurar los pines que son pines de
entradas.
Entonces vamos a ubicar aquí pin ping mode.
Tenemos el pin C1, que va a ser de entrada.
Entonces esto va a ser de entrada input y el otro también va a ser de entrada.
Entonces vamos a copiar esto para no demorarnos mucho.
Listo.
Y ahora vamos a configurar también la parte de interrupciones.
Vamos de aquí a configurar las interrupciones.
Y esto lo hacemos de la siguiente manera a tener attach interrupción.
Y Keeping?
Vamos a utilizar para la interrupción.
Desde aquí vamos a educar digital Ving tu interrupcion interrup.
Listo.
Y este pinche interrupcion va a ser el C-1.
Íbamos a llamar a una función llamada Incoder, en donde vamos a realizar los incrementos y decremento.
Y acá el tipo de interrupción que vamos a tener es cuando realice un cambio en el pulso.
Entonces eso ya va.
Vamos a ver en la parte de.
En la parte de resolución, que es la siguiente clase.
Ahí lo vamos a ver más de detalle esta parte.
Entonces lo mismo vamos a a realizar para el otro pin, para el pin número C2.
Aquí vamos a ubicar eso.
Y ahora lo que vamos a poner acá es una.
Un título, una etiqueta para mostrar que vamos a imprimir serial print
ln e.
Vamos a imprimir el número de.
El número de conteos.
Número de conteos.
Recuerden que esto va va a incrementar o de incrementar la variable N entonces luego acá en el voy loop
vamos a ingresar ya la parte que les había mencionado para correr nuestro algoritmo cada tiempo de muestreo.
Entonces esto lo hacemos de esta manera tenemos aquí y vamos a utilizar la función milis y vamos a restar
el tiempo anterior.
Y si este tiempo es mayor, igual al tiempo de muestreo que era el sample time, entonces solo ahí se
va a ejecutar este algoritmo.
Entonces ahí lo que vamos a hacer es imprimir simplemente lo que vamos a hacer aquí es imprimir serial
print.
Lo que vamos a hacer es imprimir el número de cuentas.
Entonces aquí vamos a ponerle una etiqueta llamada cuentas.
Esto va a poner también aquí dos puntos visto y luego acá lo que vamos a hacer es serial punto print.
LN Vamos a imprimir el valor de N. Y adicionalmente acá lo que nos falta es actualizar el tiempo anterior.
Aquí actualizamos de igual manera utilizando la función Milis.
Con esto aseguramos que todo este código que tenemos acá se va a ejecutar en un tiempo de muestreo de
100 milisegundos.
Luego esto lo vamos a ver que vamos a utilizar para la parte de control de la parte de control.
Debemos realizar el control cada determinado tiempo, que en este caso es 100 milisegundos.
Listo, entonces lo que nos falta aquí es la función encoder.
Entonces nos falta esta de acá, vamos a crearla.
Esta función no va a devolver nada.
Entonces de tipo void tenemos encoder y tampoco va a tener ningún parámetro.
Y también podemos ubicar aquí.
Listo.
Y acá, dentro de lo que vamos a hacer es ya realizar la parte de la tabla que habíamos revisado.
En primer lugar, lo que debemos hacer dentro de esta función es de actualizar el estado anterior con
el estado actual, para que luego cuando vuelva a leer continúe con el proceso.
Entonces aquí lo que vamos a hacer es leer el estado actual de los pines.
Entonces aquí podríamos leer los pines, no?
Entonces con el método reads ping right podríamos leer, pero para hacerlo de una manera mucho más rápida
vamos a utilizar la lectura de todo el puerto.
Entonces, en este caso estamos trabajando en el puerto de aquí, lo hacemos con Pindy.
Con eso leemos todas las entradas del puerto de y debemos filtrar porque lo único que nos interesa a
nosotros desde el pin 2 y 3 que habíamos declarado RIV, esto como lo hacemos, podemos ver aquí en
el archivo.
Aquí podemos ver más a detalle cada una de las distribuciones de los pines incluso y estamos utilizando
el puerto de entonces.
Aquí podemos ver que tenemos estos pines de interés.
Entonces aquí vamos a hacer una aunt con este valor.
Este valor de aquí, como podemos ver, es un puerto de 8 bits.
Entonces aquí pasando la decimal vemos que equivale a 2.
Es por eso que aquí debemos hacer una aunt con el 12 para filtrar los demás pines que no me interesan,
simplemente los pines que me interesa.
Entonces ahí ya tendría el valor actual, la lectura actual de los pines.
Luego en la siguiente clase ya vamos a ver cómo implementar la tabla.
En base a estos estados anteriores y actuales ya hemos desarrollado casi y la mayor parte de código,
entonces vamos a continuar con el código en la siguiente clase.