Hola bienvenidos a un nuevo capítulo y en esta ocasión llegó el momento de Doble M o modulación por
ancho de pulsos.
La verdad que para mí era un capítulo muy muy esperado.
Yo había preparado para esto mi osciloscopio que uso normalmente pero luego cambié de opinión ya que
creo que en esta ocasión tan especial vale la pena y por eso saqué del armario y desempolve mi primera
si los copio osciloscopio que me ha acompañado durante toda la vida me ha dado grandes satisfacciones
y la verdad es que como en la época donde más lo usé era donde estaba aprendiendo.
Creo que la ocasión lo amerita y sigue funcionando como el primer día e incluso para algunas cosas.
Lo encuentro más práctico que los modernos osciloscopio LCD lo que he hecho acá es mantener el ejemplo
de la clase anterior en el motor ahora les voy a mostrar para que vean lo único que he hecho es conectar
la punta de prueba de los hilos copio en el pin positivo del LED y la masa de los hilos copio en la
masa o en el negativo de la Fuente.
Bueno no hay mayor secreto ahora Acompáñame al código que les quiero mostrar al esta parte es lo mismo
que teníamos anteriormente simplemente declaró con un nombre cada uno de los pines que voy a usar.
Luego declaró una constante a dónde voy a poner una pausa ya que aparece lo nuevo he declarado brillo
igual a cero.
Es un entero pero por ahora esto lo dejamos de lado.
Vean lo que hago agarro y declaró el pin de led rojo o sea el 5 como salida y esto es algo que nos remonta
a uno de nuestros primeros capítulos en cuanto a manejo de Arduino a donde hacíamos simplemente parpadear
un LED enciende esperó medio segundo encendido apago esperó medio segundo apagado.
Hasta ahí nada de dificultad y fácil vamos a probarlo.
Bravo.
Bueno la idea que tengo es de poder mostrarles al mismo tiempo en los giroscopio que no es más que un
aparato que nos muestra de manera gráfica las señales que llegan al LED.
En este caso es bastante simple ven cada vez que se enciende el LED en los silos copio muestra una señal
en alto sube baja sube baja.
Coincidentemente estamos en una escala de un voltio por cuadrito.
O sea que en el eje Y Griega vamos a tener voltios por no mide 2 voltios y porque el LED luego de la
resistencia tiene una señal o una tensión de 2 voltios en el eje X voy a tener el tiempo bueno yo acá
estoy haciendo que si los copio barra muy lentamente porque la frecuencia que tengo es muy lenta.
Si se fijan la frecuencia es de un Gertz ya que completa un ciclo en un segundo bueno hasta acá nada
revolucionario nada nuevo.
Pero vean algo yo lo que voy a hacer es reducir la espera o el delay que tengo acá en vez de poner 500
milisegundos o poner un milisegundo.
Entonces qué va a suceder.
El LED se va a pagar y aprender mucho más rápido y por ende la señal que va a haber si los copio va
a estar bastante más agitada.
Veamos qué pasa.
Gravó
bueno se ven como dos puntos pero en realidad es porque estaba corriendo lento.
Miren lo voy a celebrar un poco el barrido
y que apareció una señal cuadrada.
Como ven esta es la porción que permanece encendido el LED y este de acá abajo es la porción que permanece
apagado el LED se entiende bien.
Yo voy a tratar de hacer coincidir esto en la cuadrícula.
Un momento
bueno hay también modifiqué un poco la escala del eje X y como ven tenemos un cuadrito o sea un milisegundo
encendido un milisegundo apagado 1 y 1 1 y 1 y el LED cómo se comporta.
A ver si lo puedo enfocar mejor.
Como ven el leve aparentemente está encendido lo que sucede es que se enciende y se apaga tan rápido
que prácticamente no puedo notarlo.
Bueno acá se me presenta un problema y es que yo quiero empezar a trabajar con esperas más pequeñas
con Pilay mas chicos de un milisegundo y lo que sucede es que no puedo usar valores menores a 1.
Entonces aparece una nueva función de Arduino que se llama Dilthey mini micro seconds o esperar microsegundos
y para que se den una idea mil microsegundos equivalen a lo que teníamos antes como un milisegundo.
Entonces ahora bien podría ser lo siguiente si utilizo Dilemma micro seconds mil es lo mismo que poner
de ley 1 un milisegundo.
Así que esto sería equivalente a lo que teníamos recién.
Pero miren lo que voy a hacer yo quiero ahora que el LED permanezca encendido la mitad del tiempo de
lo que permanece apagado.
Miren lo que sucede
tengo un error pero me faltó una s gravó
puede notarse ahora.
Miren cómo la parte positiva de la parte que permanece encendida del LED sólo ocupa la mitad de lo que
permanece apagado.
Quiero achicar aún más quiero achicar aún más la parte que permanece encendido el LED
entonces vamos a poner 100 10 a 1.
Vamos gravó
Hey miren qué pequeñita es la parte que aparece el led encendido.
Voy a tener que agrandar esto o sea hacerle un zoom para ver mejor
bueno hoy pueden ver.
Miren qué pequeña es la porción encendida con respecto a la que está apagada.
Veamos qué hace el LED.
Cómo se está comportando.
Si bien la cámara es bastante difícil de notarlo el LED a simple vista brilla bastante menos.
Pero si todo esto es una particularidad de los leds y es bastante a veces difícil tratarlo ya se van
dando idea de que lo que quiero hacer yo es obtener grados de iluminación porque hasta recién con una
salida digital sólo podíamos hacer que o tenerlo siempre encendido o totalmente encendido o totalmente
apagado y las posiciones intermedias medio encendido un cuarto encendido como hacemos no podemos.
Arduino no posee ninguna salida analógica real que sea capaz de emitir por ejemplo 1,1 voltios no o
emite cinco o emite cero entonces un truquito que tenemos por así decirlo es a través de la modulación
del ancho del pulso.
Eso es lo que estoy haciendo acá estoy modificando el ancho del pulso de la parte positiva.
Entonces mientras más tiempo pasa encendido el LED más brillantes se pone o en realidad más brillante
aparenta estar porque en realidad el LED aunque yo no pueda verlo está parpadeando rapidísimo.
Vamos a tener en cuenta que en este momento está parpadeando alrededor de 1000 ciclos por segundo.
O sea se enciende y se apaga mil veces en un segundo.
Por eso no puedo notarlo pero me aprovecho de ese efecto para simular que controlo el brillo más brillo
menos brillo.
Bueno qué es lo difícil que es que les contaba recién lo que pasa es que un LED con que apenitas se
empieza a parecer una parte positiva el LED ya brilla mucho.
O sea la respuesta lumínica con respecto a la señal que yo voy inyectando a la atención no es lineal
con que aparezca un poquito de atención LED ya brilla mucho y después todo el resto de su vida detencion
que yo le puedo aplicar no marca gran diferencia entonces digamos que la diferencia de apagado total
encendido ya lo logro teniendo la mitad de la señal encendida y la mitad de la señal apagada.
Si yo sigo aumentando la parte encendida ya no voy a notar tanta diferencia.
Eso hay que tenerlo en cuenta y se aprende y se entiende mejor usándolo poniéndolo en práctica que desde
sólo la teoría.
Entonces repasemos qué estamos haciendo acá.
Lo que estamos haciendo es mediante un encendido una espera un apagado y una espera generar una frecuencia
una señal que oscila X cantidades de veces por segundo lo suficientemente rápido como para que el LED
no se note que está parpadeando y yo jugando con la parte que parece con la parte que está encendida
y jugando con el tamaño de la parte que está apagado.
Puedo simular que el LED está más o menos encendido en realidad lo que cambia es la percepción en mis
ojos de cuánta luz está emitiendo en realidad cada vez que parpadea y se encienden leds está brillando
a fondo pero como lo hace por lapsos muy breves y cada vez más breves mientras más angosto hago el pulso
parece que brilla menos.
Bueno hasta acá ya estamos entendiendo más o menos de qué se trata de esto de modulación por ancho de
pulsos.
Lo que pasa es que yo lo estoy probando con un LED bueno con un LED no hay mucho más que mostrar pero
imagínense cuando hagamos un robot si si tuviéramos un robot que solo anda o a máxima velocidad o parado
o máxima de velocidad o parado lo más probable es que nuestro robot termine estrellado.
Imagínense si tuvieran que manejar un auto que sólo puede ir a fondo o frenar a fondo o frenar.
No nos sirve.
Necesitamos controlar de una manera analógica o gradual las distintas potencias que puede tener por
ejemplo un motor la modulación por ancho de pulso es muy muy utilizada.
Vamos a seguir con algunos detalles les pregunto a ustedes por qué se genera esta frecuencia.
Porque yo tengo un semi ciclo positivo y ahí aparece una palabra técnica semi ciclo positivo les llamamos
a la parte de la onda que está en alto o contencion y mi ciclo negativo le llamamos a la parte de la
onda que está abajo apagada o con cero voltios.
Entonces por qué este hemiciclo tenemos uno positivo uno negativo uno positivo y uno negativo y nunca
cesa porque porque estamos trabajando con un loop le decimos que se vaya arriba abajo arriba abajo y
se va repitiendo porque lo tengo adentro del loop.
Ahora supongamos que esto que tengo acá que en teoría es al 10 por ciento.
Qué quiere decir esto.
Que tenemos un Dutys cicle o Dati sigla en inglés que quiere decir en realidad ciclo de trabajo ciclo
útil.
En definitiva es el porcentaje de parte positiva que tengo.
Si pudiéramos traducir de alguna manera en potencia cuando tengo un ciclo de trabajo del 10 por ciento
que es este caso el 10 por ciento del tiempo permanece encendido y un 90 por ciento del tiempo permanece
apagado.
En realidad tendremos que corregir para que esté correcta la fórmula tendría que ser ahí entre los dos.
Si suma 1000 podemos decir que este es el 10 por ciento y acá tenemos un 90 por ciento.
Entonces como acá tenemos un ciclo de trabajo del 10 por ciento podríamos decir que lo vamos a usar
para acelerar el motor de un robot al 10 por ciento para que vaya al 10 por ciento de su velocidad máxima
se entiende pero esto me genera un problema.
El problema es el siguiente y es que un robot lo único que hace no es andar para adelante un robot mientras
avanza también por ejemplo puede estar midiendo a distancia puede estar recibiendo señales de GPS y
por lo tanto el Arduino dentro del club va a tener que hacer muchas cosas.
Por ejemplo acá va a tener que atender señal GPS.
Supongamos que esos son no sé 40 líneas de código que tenemos que hacer.
Luego tienen que calcular distancia a obstáculo.
Acá tenemos otras 20 líneas de código para desarrollar esa tarea.
Entonces un momento o hace esto o hace esto qué quiere decir con esto.
Imaginen que con estas dos líneas lo único que estamos haciendo es un semi ciclo apagado y un semicírculo
encendido.
Nada más.
Yo necesito que de manera constante exista para que el robot siga avanzando.
1 Un hemiciclo apagado un encendido apagado encendido de manera permanente.
Así que hacerlo de esta manera no va a ser lo más óptimo.
Si no vean hagamos una simulación cómo podemos simular que luego de generar un hemiciclo positivo y
un hemiciclo negativo cómo puedo simular todas las otras tareas que hago en el medio.
Simple con un delay bueno voy a generar un Dilla y de un segundo que supuestamente vamos a decir eso
es el tiempo que le va a tomar a nuestro microcontrolador hacer otras tareas.
Después de que termina de hacer esto nuevamente genera mi hemiciclo positivo y un ser mi ciclo negativo.
Entonces yo les quiero mostrar
en el osciloscopio todavía vemos el programa anterior todavía no lo grabé estamos viendo sin este display
que acabo de agregar.
Veo la señal pura repitiéndose una y otra vez.
Ahora vamos a ver cómo se ve la señal con este delay que acabo de agregar grabo y aquí empieza bueno
prácticamente voy a ver si en la cámara la toma
se alcanza a ver como algunos destellos por aquí.
Y eso qué quiere decir que cada segundo aparece escasamente un pulso positivo.
Y recién después de otro segundo vuelve a aparecer otro puntito positivo.
Es más en el LED se alcanza a ver no sé si desde la cámara voy a hacer el intento
poniendo la mano se puede llegar a ver el destello rojo del LED que alcanza a parpadear una vez.
Eso no es pedo pedo volvé.
Pero eso no lo es porque es apenas un pulso que esporádicamente aparece cada tanto con eso nos vamos
a hacer gira ninguna rueda ni como verán se perdió totalmente el efecto de hacer brillar un LED apenas
al 10 por ciento.
Bueno voy a borrar el Miley.
Miren cuando Borrel Miley vuelve a aparecer nuestra señal ahí estamos otra vez.
Entonces hemos aprendido que es pedo el BBM pero no hemos aprendido de una manera práctica de llevarlo
adelante y esto es lo que voy a enfatizar porque cuando me tocó estudiar microcontroladores me acuerdo
que esta parte de la contundente y muy clara la que lo destacó hoy en día es como que cuando hablamos
de Arduino se la pasa por alto y es tan importante que se la quiero explicar de esta manera.
Mirá lo primero que quiero contarles es que cuando vamos a usar la salida doble B.M. de Arduino no es
necesario declararlas como salida.
En segundo lugar quiero hablar de estas salidas que tienen esa rayita tipo ñ esas salidas son especialmente
diseñadas para trabajar con doble B.M.
Y dónde está lo especial.
Lo especial está en que son capaces de mantener la generación de esta señal por tiempo indefinido en
lo que se conoce como el backgrounds por detrás o sea funciona como una especie de servicio acompáñame
a esto que les quiero mostrar yo acá preparé lo que sería un ciclo no más alto.
Espero 100 milisegundos bajo espero 900 milisegundos o sea que acá tengo un segundo en total.
Si yo esto lo tuviera en el Loop estaría generando una señal de un Gers sube baja sube baja pero miren
la puse en el z o sea las mismas líneas que yo uso para generar una señal PD doble B.M. una señal con
una frecuencia determinada.
Esta vez la puse en el ZetaP se va a ejecutar una sola vez grabó su veãan lo que hace en cámara alcanzaron
a ver se encendió y le dije no más se apagó.
Yo exageré las pausas para que se alcance a ver si los copio si no ni se vería.
Es solamente un pulso un chasquido y siguió funcionando.
Entonces acá viene el secreto y la trampa y la utilidad de la modalidad que poseen estos pines marcados
con esta rayita parecida a la de la letra ñ que son pines doble B.M. tienen una característica especial
son capaces de mantener la señal en el background o sea como un servicio yo simplemente les digo necesito
una señal de tal FEG de tal frecuencia con tal ancho de pulso y esa señal se va a mantener indefinidamente
hasta que eso la detenga o le cambie el ancho de pulso o el ciclo de trabajo es buenísimo.
No tener que estar todo el tiempo generando olas de alguna manera miren la primer ventaja es que cuando
vamos a usar estas salidas en manera doble BGM no voy a tener que declararlas como salidas digitales.
Simplemente las uso para usarlas.
Hay una función que se llama análogo right.
Así como tenemos Digital Right recordemos no nos confundamos esta función es media ambigua es como que
nos está diciendo que podamos escribir un valor analógico en un pin digital no el análogo right lo que
va a determinar el ancho de pulso de esta señal.
Pedro le BGM lo que sucede por qué hablamos de Analog cómo las señales de BBM se pueden usar para simular
tensiones analógicas valores graduales es que tiene ese nombre.
Entonces qué le tenemos que pasar le tenemos que pasar en primer lugar el PIN por el que queremos que
salga ese PIN si o si tiene que ser de estos que trae la rayita como la ñ porque por qué esto es un
servicio que depende del hardware.
Estamos habilitando una función súper especial súper importante que trae en su interior el microcontrolador
del Arduino UNO entonces vamos le vamos a decir que era por LED rojo Koma y le tengo que pasar ahora
el ciclo de trabajo la frecuencia ya está predefinida va a rondar los 500 Gertz 500 ciclos por segundo
pero lo que yo le voy a pasar es el ciclo de trabajo o sea cuan ancho quiero que sea ese pulso y la
resolución va de cero a 255 qué es esto de la resolución y que no puede no va tampoco en pasos muy muy
finitos se va saltando de pasos que el valor mínimo va a ser el cero y el más grande va a ser el 255
entonces un 127 va a ser aproximadamente a la mitad.
Ese es un ciclo del un ciclo de trabajo del 50 por ciento.
Entonces miren que como lo puse en el ZetaP esta función se va a ejecutar una sola vez y nunca más veamos
qué pasa en el osciloscopio cuando corremos este programa Reuven vía aumentar la velocidad de los hilos.
Miren en el club no tengo absolutamente nada corriendo ya no hay ninguna línea ejecutándose sin embargo
nuestro microcontrolador obediente mantiene una señal de 500 ciclos por segundo de 500 Hertz con un
ciclo de trabajo del 50 por ciento.
Este LED está brillando a la mitad gracias a esta señal.
Sin embargo funciona sola.
Lo bueno es que en el Loop pudo ir modificando Augusto el valor de la señal pero antes de irnos al club
por qué no lo probamos acá.
Miren lo voy a hacer directamente en el ZetaP.
Le voy a decir Bueno mantenerme por X cantidad de tiempo.
El ciclo de trabajo el 50 por ciento.
Mejor empecemos con un ciclo del cero por ciento o sea nada todo apagado.
Te voy a decir espera un segundo
y esto lo vamos a aprovechar.
Copio vamos a hacerlo en cinco pasos dos tres cuatro cinco y lo que voy a querer acá 20 por ciento.
40 acá le pongo un 60 y acá un 90 grabo.
Entonces lo que va a suceder es que cada un segundo va a ir ensanchándose el pulso correspondiente al
semi ciclo positivo será que va a ser así lo probemos
vieron
qué pasó.
Qué piensan que pasó.
Parece que anduvo pero no se nos quedó la mitad.
Vamos de nuevo reseteo empieza el pequeño se ensancha más ancho más ancho y ojos recuérdense.
Qué el mínimo valor es cero pero el que corresponde al 100 por ciento es 2:55 así que a la mitad o bien
tener el 127 si quiero esto sería un 50 por ciento.
Así que acá tendríamos 65 más o menos ya que tendríamos
un ciento ochenta y nueve pongámosle.
Y acá recién llega el 255 que sería totalmente positivo así que para que no pierda la gracia lo vamos
a poner en 2:50 para que tenga algo de semi ciclo negativo.
Ahora si lo grabo y vamos a ver en pantalla qué sucede.
Bueno esa fue la última orden que le di entonces obediente.
Quedó el microcontrolador manteniendo la última señal que yo le di.
La última orden que fue Mantené un hemiciclo positivo casi del 100 por ciento y apenitas.
No sé si se nota abajo apenitas hay un pulso muy pequeño
muy débilmente se nota bajo ese pulso correspondiente al hemiciclo negativa.
Bueno entonces vean que está brillando casi el 100 por ciento en esta posición.
Pero lo que quiero dejar en claro es esto el doble BBM funciona por detrás es un servicio independiente
que tiene nuestro microcontrolador y no lo tengo que estar atendiendo de manera constante.
Una vez que yo les digo necesito un ciclo de trabajo de tanto por ciento él se va a encargar de mantenerlo
hasta que yo lo detenga o lo modifique.
Esto me va a dar unas ventajas increíbles que ahora probablemente no las noten pero muy pronto las van
a conocer para cerrar esto.
Vamos con un lindo experimento y va a ser el siguiente vamos a crear un foro se acuerdan que yo creé
acá la variable brillo.
Bueno se acuerdan también que en alguna parte cuando veíamos programación les dije que de manera convencional
todos los programadores usábamos como variable en los foros el y o la variable.
Y bueno este es el típico caso a donde vale la pena romper las reglas y que en vez de usar y usemos
brillo y para qué servía.
En este caso Beriso era la variable que le asignaba al foro para que internamente le vaya llevando la
cuenta de lo que le pido que cuente entonces agarraba y le voy a decir que arrancando con un brillo
igual a cero mientras brillo sea menor que el valor máximo que yo sé que puedo adquirir brillo que es
255 el ancho más más amplio que le puedo dar al pedo BBM a sabiendas de que vamos a ir aumentando ese
valor de uno en uno podría ser acá de dos en dos acá qué voy a hacer.
Acaba de decir Analco Right y voy a escribir ahí sobre el led rojo.
Qué valor de ancho de pulso le vamos a pasar al led rojo.
Brillo.
El que tenga brillo en ese momento en esa vuelta del foro brillo va a ir aumentando en cada vuelta de
este foro desde el 0 hasta el 255.
Entonces lo que le voy a ir diciendo al ancho de pulso que me genera este servicio por detrás es en
cada vuelta le voy diciendo un poquito más ancho un poquito más ancho desde el cero hasta el 255 si
acá adentro yo no pongo un Dili si acá adentro yo no pongo un play no voy a notar se va a ensanchar
tan rápido que ni siquiera lo voy a ver ensancharse probablemente esto sea demasiado lento así que voy
a apelar a Dilthey.
Vamos a probar pero primero a ver si esto es muy lento porque como son 255 imagínense qué va a demorar
un cuarto de segundo en completar esto de cero hasta el ancho total.
Bueno entonces lo que va a hacer este foro es poco a poco ir aumentando el ancho del pulso por ende
va a ir brillando cada vez más hasta llegar al brillo máximo entonces después lo que puedo hacer es
copio una vez que se termine de hacer este bucle que va a suceder.
Bueno va a seguir con las líneas que tengamos acá voy a volver a repetir otro bucle pero este es Aliments
este arranca valiendo 255 y le voy a decir que se ejecute mientras brillo sea mayor que cero entonces
este ir de 255 a cero.
Pero para que esto funcione en vez de aumentar brillo uno en cada vuelta con menos menos es la manera
corta de decirle que vaya restando uno en uno cada vez que se cumpla un ciclo del foro.
Bueno ahí estamos entonces lo que va a hacer esto es aumenta el brillo baja el brillo cero de cero a
todo de todo a cero.
Veamos qué pinta tiene esto y cómo luce
espectacular no vamos a achicar un poco la escala.
Bueno Eusebia miren qué interesante vean que el LED ahora es como si la tierra de hecho que este ejemplo
se lo suele llamar el latido de corazón.
Voy a tratar de enfocar mejor el LED
bueno y miren qué notable cómo se va modificando el ancho de pulso y ahora es mucho más entendible.
Ahora cierra todo.
Entonces si esto hubiera aplicado un robot bastaría aplicar un robot que acelera y desacelera SLG y
desacelera no tendría mucho sentido pero por ejemplo para no crear aceleraciones bruscas esto es muy
usado.
Imagínense un robot grande que tienen motores muy potentes.
Si esos motores los acelerara de golpe lo más probable es que al cabo de unas cuantas aceleradas termine
rompiendo los ejes o los engranajes de esos pobres motores.
Porque de hecho cuando se maneja un auto no se acelera a fondo de golpe.
Si lo hace progresivamente suavemente entonces vi aumentar el lineup para que sea algo más más grave
que sea más apreciable esa subida más lenta y lo vamos a probar.
Vean cómo se va ensanchando el pull del pulso mucho más lento y cómo se va cerrando otra vez hasta el
cero bueno de esto se trata el doble B.M. Lo vamos a usar en tantas en tantas cosas pero algo que quería
dejarles más que claro era el hecho de que el doble B.M. En estos microcontroladores cuando usamos los
puertos dedicados para tal fin son un servicio funcionan por detrás quedan funcionando hasta que eso
los detenga o modifique su valor.
Bueno qué capítulo qué clase tuvimos hoy.
Espero que puedan aprovechar lo que les interese y cualquier duda porque sé que este capítulo ha sido
largo.
Sé que puede ser más complicado el salto ha sido importante.
Me lo preguntan porque para eso estamos para explicarlo todas las veces que sea necesario para incorporar
ejemplos para ayudarlos le mando un gran abrazo.
Gracias por compartir esto conmigo.