Venidos a una nueva clase y en ésta vamos a empezar a desmenuzar el código del proyecto Alan el robot.
Yo ya tengo abierto el proyecto voy a cerrar esto para tener más espacio y lo primero que encontramos
son las librerías.
No son muchas porque en realidad Arduino y la librería UEFI ya están vamos a decir preinstaladas y las
librerías externas serían serbo y la librería de M QTTF susclientes.
Bueno ya lo vimos en la clase anterior que aquí en la carpeta están esas dos librerías claro está que
recuerden que hay otro camino y es instalar las librerías desde el manejador de librerías de plataformeo
y hacerlas de manera global para que te sirvan para otro proyecto después de tenerlos included.
Venimos con los pines.
Vamos a darle un nombre a través usando finds a cada uno de los pines podríamos usar variables también.
No pasa nada.
Por suerte muchos recursos ahora disponibles con la SP 32 con la que estamos trabajando entonces.
Bueno recuerda que este va a ser una guía importante para saber cómo conectar el robot.
Cualquier modificación que hayas hecho.
Si decidiste conectar por ejemplo el PIN hehco el PIN hehco a otro pin que no sé el 25 por comodidad.
Recuerda corregir eso por aquí.
Bueno después se me ocurrió plantear esta manera de organizar las cosas así como puse pines sobre todo
en un lugar accesible para que rápidamente podamos si hacemos una modificación hasta que esto funcione.
Algo no anda qué será.
Era el PIN lo tengo que cambiar listo accedo fácilmente a donde están los pines con una buena organización.
Después ya saben a mí me gusta poner estos letreros generosos porque el código es relativamente largo
y cuando yo empiezo y quiero saltar de un lado al otro corrigiendo buscando cosas me gusta encontrarlas
rápido dentro de Configuración.
Acá no hay nada nuevo pero ustedes ya vienen de una práctica donde nos hemos conectado a través de wifi
a internet así que voy preparando las credenciales LCC ideé de la red wifi que tengo aquí a donde estoy
ahora y la contraseña de dicha red wifi.
Luego venimos con algo sumamente importante y creo que es en lo que va a girar esta clase cómo nos conectamos.
A mi me QTTF.
Ya lo hicimos.
Utilizamos un bróker pero en esta ocasión vamos a usar el Brok el bróker de bióticos X.Org por varios
motivos.
Alan es un verdadero consumidor de QTTF porque ya lo vamos a ver más adelante cuando su serbo empieza
a mover el sensor ultrasónico.
Ahora lo tenemos configurado cada 3 grados de movimiento envía un mensaje avisando a la contraparte
que va a hacer este panel tipo radar tanto el ángulo en el que está como la distancia que midió.
Entonces imaginen la cantidad de mensajes que sucesivamente o la cantidad de mensajes por unidad de
tiempo que va estar mandando va a mandar muchos mensajes por segundo mandará.
Yo calculo que unos cuatro o cinco por lo menos.
Entonces es probable que la mayoría de los brokers gratuitos que hay te limiten.
En cuanto a la cantidad de mensajes que puedes mandar por suerte bióticos X.Org de momento no tiene
ningún límite así que vas a poder hacer todas las pruebas que quieras.
Veamos rápidamente cómo crearnos una cuenta en bióticos pintor y cómo obtener las credenciales aquí
ya estoy en la página de bióticos pintor.
Voy a hacer clic en acceder.
Si no tienes una cuenta vas a crear una.
Ahora no es para nada difícil rellenar estos campos y crear una cuenta.
Una vez que ya tengas esa cuenta será ingresar a mi cuenta.
Ya estoy adentro.
Bueno ustedes no van a tener ninguno de estos dos nodos creados van a tener que crear su primer nodo.
Entonces este nodo va a hacer lo que les va a dar un usuario una contraseña para poder conectar cualquier
dispositivo y OTE.
No dejen de explorar sobre bióticos pintor el broker desde el canal de YouTube también pueden obtener
mucha información.
Hay un montón de herramientas que vamos a ir incorporando a este panel.
Luego como les decía vamos a crear un nuevo nodo esto no los quiero tocar.
Este es mío otro usando a alguien del equipo para trabajar con otros ejemplos.
Entonces yo voy a crear uno exclusivamente para Alan pero es solamente una prueba lo tengo creado le
puedo poner por ejemplo Alan el nombre y eso es todo.
Ya aparece aquí no nodo y sin estar y si me está proporcionando un usuario una contraseña y ésta es
la diferencia a lo mejor con otros broker me dan un tópico raíz aquí están todos los puertos que puedo
usar.
Luego hay opciones avanzadas que seguramente en alguna oportunidad hablaremos de ellas pero no las vamos
a tocar este nodo que acabo de crear yo lo voy a borrar.
Por qué.
Porque yo tengo este ya creado y es con el que estoy trabajando así que no voy a usar este de paso vemos
como se borran.
Miren que que ahí quiero barrerlos si borrarlo tranquilo perfecto ya no está más.
Yo voy a utilizar este nodo que creé aquí desde luego.
Por favor no uses estas credenciales que ves en pantalla porque son las de mi nodo o generarás las tuyas.
Una vez que hiciste esto una vez hecho esto ahora sí puedo volver al código y seguirte explicando de
qué se trata esto.
Bueno el servidor me QTTF en este caso bióticos X.Org qué puerto vamos a usar el 18 83 lo sé de memoria
lo inventé no lo saco bióticos por acá me dice.
El puerto TCP por el que nos vamos a conectar.
Es el 18 83
luego tenemos el usuario QTTF y de igual manera vengo copio el usuario
lo pego aquí lo mismo voy a hacer con la clave y lo mismo voy a hacer con él tópico raíz aquí lo guardé
en una variable llamada Rut topic.
Ya vamos a ver para qué sirve.
Pero básicamente a cualquier tópico que nos querramos suscribir ahora cuesta entender mucho más de lo
que son sub tópicos a cualquier subtrópico que nos querramos suscribir o bajo cualquier tópico que querramos
publicar siempre vamos a hablar dentro de este tópico general.
Este es nuestro tópico general y a partir de aquí bueno yo podré tener luces podré tener otro que se
llame comandos pero siempre le Herráiz la base de mis tópicos va a ser ésta entonces como durante el
código voy a tener que poner varias veces esto.
Bueno ya lo dejo grabado por aquí
ahora pasamos con algunas configuraciones del serbo
el máximo ángulo del servo 180 el serbo Mini el perdón el ángulo mínimo que va a moverse el cero cero
grados de cero a 180 en un primer intento cuando estuve desarrollando esto el primer objetivo que tuve
para poner esto es porque los servos azules.
Estos chinos económicos no quieren o no les gusta demasiado ir al ángulo cero.
Si vas al ángulo cero vas a ver que los está forzando y es como que hace esfuerzos se va a terminar
rompiendo entonces la idea original de esto es que nunca le permitamos que vaya al ángulo cero que arranque
en 20 por lo menos vamos probando cuánto es el menor ángulo que yo le puedo dar sin que se esfuerce.
Ya habíamos hablado algo de esto cuando vimos los ceros.
De todos modos después me surgió un problema cuando yo envío datos hacia el radar debo mandar el ángulo
para que el radar vaya y el radar si se lo vemos.
Yo he decidido poner el radar también aquí accesible para ustedes más allá de que ya vamos a ponerlo
al código disponible para el que quiera subirse a su propio Jostein para que le sea como ya lo hemos
implementado aquí en biótico X.Org al radar de Alan.
Aquí está el radar entonces ya vamos a ver cómo cuando recibamos datos vamos a empezar a dibujar las
distancias detectadas por el sensor de ultrasonido pero para que el radar se entere de que ya dio una
vuelta completa y que tiene que borrar y volver a dibujar necesitamos sí o sí mandar desde el ángulo
cero hasta el 180.
Entonces lo que nos empezaba a suceder es que si yo acá ponía un ángulo mínimo genial protegía mi serbo
pero el ángulo que iba a estar mandando hacia el radar nunca iba a mandar un ángulo cero y el radar
de momento salvo que en algún futuro lo mejoremos necesita que le mandemos desde el cero hasta el 180
para que cuando volvamos al cero borre lo anterior y vuelva a dibujar.
Entonces lo terminamos solucionando de otra manera.
Vuelvo al código acá voy a dejar desde cero a 180.
No me cabe duda de que cuando comprendas todo el código lo vas a mejorar exponencialmente.
A esta propuesta básica que estamos planteando aquí acá voy a definir otra variable que aplicaremos
a lo largo del código que es la velocidad del servo cada cuánto le doy órdenes al servo para que se
vaya moviendo de un lado para el otro.
Ya vamos a ver cómo hacemos eso pero por qué es interesante no hacerlo a gran velocidad porque entre
una orden y otra le debo dar tiempo al servo de que se mueva porque no va a terminar de moverse que
yo le estoy diciendo que se mueva la posición siguiente y ahí es cuando empiezan los problemas.
Te invito a hacer la prueba de apurarlo por demás y como todo empieza a fallar.
Entonces trato de buscar una velocidad lo suficientemente rápida para que me dé buen refresco en el
radar pero tampoco tan rápida que no le dé tiempo al servo a moverse y acá vienen servo STEPV aquí guardo
los pasos y es decir cada cuántos grados de movimiento del servo voy a hacer una lectura de distancia
porque puedo decir que lo voy a hacer cada uno cada uno y eso es lo que va a hacer escribia tener muchas
lecturas de distancia.
Eso es lo que va a hacer también es que voy a tener una gran resolución y tener una gran definición
en lo que vean el radar y la otra es algo más resumido para que vaya un poco más rápido observó.
Es decir no sólo voy a medir distancias porque no se olviden de que la acción de medir distancias lleva
tiempo.
Entonces no puedo estar moviendo el servãa mientras la mido tengo que esperar la respuesta.
Cuando logré medir recién pasó el paso siguiente.
Entonces cada cuántos pasos de servo voy a hacer la lectura de distancia aquí algo particular es muy
importante tener en claro esto
el sistema del radar funciona óptimamente con un paso de tres.
Después lo puedes probar con otro paso pero mucho cuidado mucho cuidado que si cambias el paso en la
placa del robot también en el código que hace funcionar este radar vas a tener que cambiarlo.
Entonces acá por defecto viene configurado con un paso 3.
Entonces si vos querés probar otro paso bueno eventualmente todavía está en desarrollo.
Aquí vamos a poner la opción para que le puedas cambiar el paso pero si quieres probar otros pasos te
adelanto de todos modos que el 3 me parece que es uno de los que mejor se va a desempeñar.
Lo puedes hacer descargando el código de este panel y te lo subís a tu propio Jostein lo probamos en
tu compu y ya le podrás hacer las modificaciones que quieras.
Esto es simplemente para inspirarlos.
El puntapié inicial creo yo que tienen ya conocimientos suficientes para como les decía hace un ratito
mejorar esto exponencialmente.
Veamos si siguen más configuraciones.
Bueno esto que está comentado aquí se lo dejo para aquel para aquel que tenga problemas con el router.
Si el router no le asigna a tu placa SP 32 automáticamente una IP o sea si tu router no no tiene un
DHCP ese es el nombre del sistema que le da un IP.
Cuando un dispositivo se conecta a un router si no tiene un HCP que funcione correctamente con la SP
32 vos podés sestear de manera fija la IP pero esto es algo muy avanzado pero no quería dejar de ponerlo
por si alguien se enfrenta con ese problema.
Bueno voy a seguir avanzando ya nos queda poco para esta clase de variables.
Bueno aquí puse aquellas variables globales o instancias de alguna librería.
Bueno declaró a instancias de la librería serbo aquí tengo para guardar la posición actual del serbo
pero aprovecho ya que estoy viendo creo que esta es una típica variable esto es un buen acto de buscar
post quiero buscar si la estoy usando en otro lado ya que me parece me parece voy a hacer una búsqueda
rápida de esta variable usando más.
Es normal que a veces queden variables en desuso entonces buena práctica limpiarlas quedan desde la
época del desarrollador.
Estoy buscando es la única que se me había pasado por alto esta variable ya no la necesitamos porque
ya no lo estoy usando.
Habrá quedado ahí de la de los días en que me puse a desarrollar este código.
Miren acá hay otra variable que está totalmente en desuso esto ya no estoy usando también.
Qué bueno poder limpiar fueron pruebas que hice
ahora si tenemos el Waffen Client declaró a una una instancia de librería Huay fait Client que me sirve
para pasársela a una instancia de la librería Pub subtle.
En definitiva le estoy diciendo a mi me QTTF que se tiene que conectar.
Ya veremos a dónde pero por dónde y por una placa de red por wifi no por esta instancia.
Le paso la distancia de la placa de wifi entonces así la librería y me QTTF sabe qué interfaz usar para
llegar al preciado Internet para mensajeria.
Voy a necesitar una variable global también que es a enviar tu Zend.
Le he llamado acá me he esforzado un poco más para que tengamos variables en inglés y este código esté
un poco más limpio más presentable.
La declaró vacía ya van a ver después la vamos a usar esa tienen algo de práctica en esto para preparar
ese string que vamos a mandar como mensaje hacia el radar.
Si el panel propiamente dicho aquí un buffer un buffer que nos va a servir para cargar previamente esto
que vamos a enviar van a ver a lo largo del código que usamos varias funciones para no hacer un gran
código espagueti.
Difícil de comprender.
Hemos organizado las cosas en funciones y ya saben que cuando trabajamos con plataformeo no puedo largarme
a declarar funciones abajo o crearlas mírenme aquí abajo.
Acá tengo una zETAp wi fi esta que sirve para conectarnos al wifi y me tiene una función.
Bueno a mí me gusta tener todas las funciones abajo del loop y del ZetaP de las funciones Luv y zETAp
pero eso me daría error para hacerlo correctamente.
Primero a cada una de las funciones que tengo abajo tengo que declararlas aquí.
Entonces cómo se declaran como si la estuviera por crear.
Solamente que en vez de abrir y cerrar llaves le pongo un puntito y como con eso listo.
Entonces estas son las funciones así muy por encima.
Esta va a ser la función que mide distancia la que se conecta a wifi.
Este es el famoso Callback ya sabemos para qué sirve.
Cuando nos llegue desde Internet a nosotros un mensaje cuando nos llegue a nosotros qué tipo de mensaje
nos llegarán al robot los que estás pensando.
Andá adelante andá para atrás para la izquierda o para la derecha.
Seguramente se te ocurrirán nuevas acciones que puede hacer el robot y no tendrás que trabajar sobre
el calva cada vez que llegue un mensaje se llama o la librería que te llama esta función y ahí vos ya
podés decidir entendiendo qué es lo que estás llegando qué haré o qué no haré.
Tenemos la función reconectar que la usamos para si estamos desconectados conectarnos por primera vez
a QTTF o si se nos cae la conexión mi me QTTF para que rápidamente se reconecta.
Ya analizaremos todas las funciones.
Después tenemos una función llamada Movement de movimiento a la que le vamos a pasar estos strings ven
que la función está espera que le pasemos un string y bueno se darán cuenta para qué le pasó un tren
si le pasamos left haremos que el robot gire a la izquierda derecha adelante atrás.
Bueno aquí se acaban ya las funciones entonces seria la primera etapa del código antes de llegar al
zETAp tenemos un pantallazo general.
Ahora si empezamos con la parte más interesante cómo vamos a plantear el movimiento del servo cómo vamos
a obedecer las órdenes que nos llegan desde QTTF así que gracias por esta compañía lo seguimos a esto
en la siguiente clase.