Bienvenidos en esta clase vamos a realizar la prueba del cálculo de velocidad en RPM.
Entonces vamos a Arduino y vamos a abrir el monitor serial.
En este caso podemos observar que tenemos una velocidad de RPM de 0.
Debido a que aún no hemos conectado la batería como lo pueden ver ahí, entonces vamos a tomar el motor.
Vamos a poner ahí y también vamos a realizar la conexión.
Y podemos ver ahí que nuestro motor está girando en sentido antihorario.
Y el valor.
Como pueden ver, oscila entre los 110 y los 112 revoluciones por minuto.
Entonces podemos ver ahí nuestro resultado.
Podemos observar ahora vamos a invertir el sentido de giro.
Para esto vamos a cambiar en la parte de Hakam.
Vamos a ingresar un valor negativo y ahora debería girar en sentido horario.
Entonces vamos a ver acá en el monitor serial.
También debe tener un valor negativo.
Podemos ver ahí que aquí alcanza un poco más de velocidad.
No podemos ver ahí que está girando en sentido horario.
Podemos verlo ahí.
Y este sería el resultado.
Ahora vamos a ver cómo podemos nosotros ingresar aquí el valor de control y poder variar la velocidad
mediante el monitor serial.
Vamos a ver esa parte.
Entonces, lo que vamos a hacer acá es lo siguiente Vamos a ver cómo comunicarnos con nuestro Arduino
mediante el puerto serial que tiene este Arduino.
Estos datos lo vamos a recibir en una cadena que lo vamos a llamar input string y lo vamos a inicializar
como vacía.
Listo.
Y acá vamos a tener una variable booleana.
Esto para indicar que los datos ya han llegado correctamente.
Esto va a ser simplemente como una bandera que me indica que los datos han llegado correctamente.
String complet igual false.
Vamos a iniciar como falsa y también vamos a ver aquí ya de una manera general.
Por ejemplo, esto ya para utilizar en la parte del robot podemos ingresar desde el puerto serial múltiples
valores.
Es decir, vamos a tener uno, dos, tres, cuatro dependiendo de nuestra necesidad.
Entonces esos valores lo vamos a separar mediante una coma.
Entonces vamos a necesitar aquí una coma.
Vamos a ingresar aquí.
El separador de datos va a ser una coma.
Podemos ingresar cualquier otro tipo de string o de carácter, pero vamos a ingresar la coma y luego
aquí vamos a tener una variable que me va a indicar cuántos datos voy a recibir desde mi puerto serial.
En este caso solamente vamos a trabajar con uno.
Pero este código, como les mencionaba, va a ser de manera general y podemos ingresar aquí la cantidad
de datos que necesitemos, simplemente cambiando en la parte de acá.
Por ejemplo, si queremos recibir dos datos, lo cambiamos acá ítem y lo ponemos como dos, y estos
datos lo vamos a almacenar en una variable de tipo table llamada data.
Vamos a crear un array donde se va a almacenar todos estos datos, que va a tener el tamaño de la cantidad
de datos que vamos a recibir.
Entonces aquí vamos a recibir nuestra variable de control CB para poder controlar la velocidad de nuestro
motor.
Ahora vamos a ver cómo crear una función para la recepción de datos.
Entonces vamos a partir de la parte de acá.
Vamos a empezar acá antes del encoder.
Vamos a crear una función que me permita obtener esos datos.
Entonces, para eso vamos a utilizar una función predeterminada de de Arduino que es del voix serial
Event.
Entonces este e esta función de aquí se va a ejecutar cada vez que exista datos en nuestro puerto serían.
Y aquí vamos a ingresar lo siguiente Vamos a utilizar el bucle while para indicar que mientras exista
datos serial, mientras exista datos en el buffer de entrada, lo que vamos a hacer es recibir esos
datos y lo vamos a almacenar en una variable.
Entonces vamos primero a recibir carácter a carácter.
A este carácter lo vamos a llamar hinchar y vamos a hacer una conversión.
Es un caso.
Vamos a convertir ese valor mediante la función serial puntó Ritz.
Vamos a leer carácter a carácter hasta encontrar un carácter.
Que sea un salto de línea e indicar que la trama ha sido completada.
Entonces luego qué vamos a hacer acá?
Lo que vamos a hacer es concatenar cada uno de esos caracteres.
Luego vamos a ver la manera de cómo realizar la separación de cada uno de los datos.
Listo.
Luego acá lo que vamos a hacer es comparar, como les había mencionado, si este carácter de entrada
es igual, igual a un salto de línea.
Esto lo hacemos de esta manera.
Si equivale a un salto de línea, entonces ahí vamos a levantar la bandera.
Recuerden que teníamos una bandera llamada stream complet y la vamos a levantar.
Lo vamos a poner como verdadero.
Entonces, así vamos a recibir los datos que ingresemos aquí en el monitor serial y lo vamos a ir almacenando,
como ven en esta variable que habíamos declarado inicialmente.
Y vamos a terminar.
Como ven acá.
Cuando nuestro carácter sea un salto de línea, así levantamos nuestra bandera y vamos a comenzar.
Y ahora vamos a ver cómo separar este conjunto de datos.
Esto vamos acá.
Vamos a tener la parte de acá.
Vamos a poner un if.
Si es string complet, es verdadera.
Lo que vamos a hacer aquí es realizar la separación que acaba entre paréntesis.
Si esto es verdadero, entonces hemos recibido de manera correcta los datos y vamos a separarlos.
Entonces vamos a recorrer toda la trama.
Esto lo hacemos con el Ford, vamos de inicial y igual a cero y esto va a ser menor al tamaño de datos
data talen que habíamos declarado anteriormente
y acá lo vamos a poner como y más, más listo y tendríamos nuestro Ford listo.
Y aquí lo que vamos a hacer primero es encontrar el índice donde se encuentra Lacoma, nuestro separador
en este caso.
Esto lo hacemos de esta manera como estamos manejando String es muy fácil, lo hacemos con input string.
Vamos a tener diferentes métodos que podemos utilizar.
Esto lo hacemos de esta manera index index off.
Ingresamos el separador, que en este caso era Lacoma.
Así encontramos el índice donde se encuentra la coma.
La primera, como luego.
Aquí vamos a hacer lo siguiente.
Vamos a convertir esa pequeña trama antes de la coma y lo vamos a almacenar.
En Data Seeking usamos input string y vamos a obtener una subcadena sub string desde cero hasta el índice
que habíamos encontrado index.
Y esto lo vamos a convertir en un valor de tipo entero.
Listo.
Si vamos a enviar datos de tipo float aquí debemos cambiar simplemente a float.
Pero en mi caso, como saben, este valor se ve es de valores de enteros que varían de 0 a 2 55.
Entonces lo va a convertir del tipo entero.
Pero si desean recibir valores con decimales, deben hacer este cambio, convertir ese valor listo.
Y lo que vamos a hacer acá es input string.
Vamos a tomar la trama restante.
Entonces vamos a hacer lo siguiente input string, suvez string.
Listo y vamos a tomar la trama que sobró sería index +1.
Entonces vamos a tomar desde ahí hasta la parte final.
Entonces, así como ven esto se va a volver a repetir.
Aquí hemos actualizado el input de String.
Como pueden ver, esto se va a volver a repetir hasta terminar de separar cada uno de los datos.
Entonces, una vez que haya terminado lo que vamos a hacer, lo siguiente vamos a trasladar esta parte
de acá.
Vamos a trasladarlo en la parte de acá.
Aquí.
Cuando haya terminado de separar los datos, vamos a asignar el valor de data a CB, en este caso la
posición cero.
Listo.
Y con eso estaría listo.
Ahí estaría completo.
Ya podemos ingresar el valor como 20 variable de control desde el monitor serial.
Automáticamente también tenemos la lectura de R.P.M.
Vamos a compilar para ver si no tenemos ningún inconveniente.
Acá tenemos un pequeño problema.
Aquí es complet.
Vamos a ejecutar nuevamente y acá tenemos hinchar.
Esto es con mayúscula.
Vamos a revisar todos los errores que tengamos y creo que ya no tenemos ningún error.
Listo.
Pero hay algo que nos estamos olvidando y es en esta parte de acá.
Acá lo que debemos hacer cada vez que recibamos nuestros datos es encerrar la variable input input stream.
Debemos reiniciarla y también debemos bajar la bandera es string complet.
Debe ser ahora falso.
Ya si estamos listos para recibir otro nuevo dato, entonces vamos a cargar este código en en Arduino
y vamos a observar el resultado.
Vamos a abrir aquí el monitor serial.
Vamos a abrirlo.
Tenemos ahí la velocidad y tenemos acá nuestro motor.
Entonces ahí vamos a tomar el motor y vamos a ingresar aquí la velocidad.
Vamos a empezar con 100.
Vamos a ver ahí que tenemos una velocidad de 63 64 rpm.
Vamos a aumentar a 200.
Como vemos, aumentamos la velocidad.
Tenemos 255 menos 100.
Y como bien cambia de sentido menos 200 y menos 255.
Listo.
Entonces, como ven, ahí hemos logrado realizar el control mediante el puerto serial.
Esto va a ser bastante útil luego, porque vamos a poder controlar las velocidades de los motores mediante
una conexión inalámbrica, mediante lo mismo que acabamos de hacer.
Ahora vamos a ver un pequeño problema que existe en los motores.
Por ejemplo, si yo ingreso 10, mi motor como ven no empieza a moverse.
El ingreso 20 tampoco se mueve de ingreso 30.
Tampoco tengo 50.
Tampoco vamos a poner 80, tampoco se mueve, vamos a ingresar 90, tampoco se mueve y como podemos
ver, no se mueve nuestro motor hasta darle un valor alto como pueden ver ahí.
Entonces esto de aquí es la parte de zona muerta.
También tiene que ver bastante con la batería.
Tal vez en este momento puede que esté descargada, pero eh.
Usualmente el rango de zona muerta va entre los 30, 40, 50.
Recién ahí empieza a moverse, pero una vez que se mueve vamos a ver que con 50 aún se puede mover,
no?
Como pueden observar esto debido a que ya venció la inercia que tiene el motor, ya venció eso y ahora
ya puede moverse con ese valor de 50.
Entonces vamos a ingresar 40 y como pueden ver ahí se detuvo y ya no se vuelve a mover con 50, como
pueden ver 60 tampoco.
Entonces ese es el valor que debemos considerar en la parte de control.
Ya lo vamos a estar analizando para ver cómo podemos solucionar ese problema que tenemos en el control
de motores.