Xwork's Blog

The lord is waiting to take your hand.

El Video (AUDIO) Correcto #9 - Convirtiendo CD a FLAC

 Hola de nuevo a todos, el día de hoy vamos a ver cómo extraer nuestros audios de CD's originales y convertirlos a FLAC. Al inicio pensé en hacer alugan clase de programa para hacerlo, pero cómo probablemente solo uno de cada mil personas va a convertir sus discos (incluso a estas alturas, habrá quienes no los conozcan), decidí solo mostrar cual es el método que uso actualmente.


Para poder hacer la copia de los discos, vamos a usar MediaGo de SONY, aunque es un programa relativamente viejo, aun al día de hoy funciona y tiene la virtud de que las funciones que requieren de internet, aun funcionan. Para no adelantarnos, vamos a ir en orden y lo primero que haremos es descargar el instalador de Media Go. Una vez lo descargamos, lo instalamos y lo ejecutamos.

Una vez que el programa está listo, simplemente insertaremos nuestro CD. De lado izquierdo aparecerá en una ficha llamada "CD de audio"; hacemos clic en ella y podremos ver el contenido del CD.


Antes de continuar, haremos clic en el menú "Herramientas>>Preferencias" y se abrirá un dialogo con los ajustes del programa.


Hacemos clic en "Importación de CD" y en la caja de selección de la opción "Usar pistas usando el formato" seleccionaremos la opción FLAC. Hacemos clic en aceptar y los ajustes estarán listos.

Para comenzar la copia, simplemente hacemos clic en el botón "Importar CD". La copia comenzará y al finalizar, podremos escuchar nuestro archivos.


La razón principal para usar "Media Go" es simple: Ya tiene todo lo necesario; cuando importa los archivos, se conecta a la base de datos Gracenote y obtiene todos los datos que puedan ser relevantes a la hora de identificar una canción.

Y bien, por ahora es casi todo...

He hablado de las cosas que son necesarias para poder oír audio en buena calidad (y no hablo de esos "audiofilos mugorosos" que le rebanan los bordes al los CD's para mejorar la calidad del audio), ya mencione los audifonos, los archivos de audio y la última cosa que es importante mencionar; y eso es el dispositivo que se va a encargar de reproducir el archivo.

Muchos de los celulares, simplemente contienen la "placa de audio" mas genérica que se pude encontrar, aun en los dispositivos de gama media, la mayor parte de ellos tendrán dicha placa que solo es capaz de reproducir hasta 32000Hz (si bien nos va); aunque parezca redundante; si conectamos unos audífonos de calidad superior al puerto 3.5mm del teléfono y este solo pude decodificar hasta cierta calidad, estaremos desperdiciando el hardware. Identificar si un teléfono es capaz de reproducir audio en alta calidad no es sencillo, ya que muchas veces es un dato que no es relevante a la hora de vender (siempre se verá primero la RAM y el CPU) pero si es posible, buscar el logotipo "Hi res audio" ayuda.


Aun si el equipo no cuenta con el logotipo, hay otras formas de saber si lo es.

LDAC ayuda a transmitir audio en alta calidad por Bluetooth


Y bien, por ahora es todo, en el siguiente post veremos cómo leer los metadatos de los archivos FLAC en C# y varios lenguajes mas.

Los leo luego.


El Video (AUDIO) Correcto #8 - WAV VS FLAC

 Hola de nuevo a todos, el día de hoy vamos a continuar con un poco más sobre el audio de buena calidad.



En el post anterior vimos cómo es importante tener un par de audífonos de la calidad adecuada para poder disfrutar de la música cómo es debido. Pero, no solo se trata de los audífonos, hay otros elementos que son importantes a la hora de disfrutar del audio de buena calidad. 

En este post nos concentraremos en el archivo de audio en si. En reiteradas ocasiones he dicho que los archivos FLAC ofrecen una calidad superior al MP3, incluso en alguno de los post anteriores hice el comparativo, en twitter (o ahora X), mucha gente dijo que los archivos FLAC si bien tienen una calidad mejor que el MP3, también se pierde mucha de la información que conforma la música, y esto es cierto o no, dependiendo de cómo se configura la compresión, cual es el origen del cual vamos a crear nuestro FLAC y algunos otros factores. Pero por lo general, si se configura bien, los archivos FLAC no tendrán ninguna perdida y para probarlo, vamos a hacer la misma prueba que hicimos hace tiempo; vamos a comparar FLAC contra WAV. ¿Por qué WAV? te estarás preguntando, simple, es el contenedor que se usa para el audio sin compresión, por lo que su tamaño será significativamente mayor al de los otros.

Archivo WAV copiado desde un CD ORIGINAL

Archivo FLAC creado desde un CD ORIGINAL

Las pruebas.

Al igual que la vez anterior, vamos a usar AUDACITY para comparara los audios. Su interfaz a cambiado un poco, pero si sigues los pasos que te mostraré, todo saldrá igual. En esta ocasión de igual forma subiré dos archivos de audio de la misma canción, pero eso si, recuerda que si no posees un CD original, debes de eliminarlo a las 24 horas máximo (resulta difícil tener una copia original, aun buscando el ID del CD que es: "Fantasía TFF-3838" no se encuentra, ni en la pagina de fonovisa que es la que lo editó).


  1. Descargar audacity.
  2. Descargar el archivo WAV.
  3. Descargar el archivo FLAC.
Una vez instalado audacity, lo abriremos luego arrastraremos los archivos de audio que descargamos,
puede ser uno o los dos a la vez. Una vez abiertos, seleccionaremos una pista de audio (de hecho dos porque son estéreo) e iremos al menú "Efectos>>Especial>>Invertir" con esto crearemos una versión invertida de nuestra canción. Para "sumarlas", bastara con seleccionar las dos pistas (técnicamente cuatro pistas porque ambas son estéreo) para hacerlo, haremos clic en el panel izquierdo y muestras mantenemos presionada la tecla "control" hacemos lo mismo con la otra. Una vez seleccionada las dos pistas, iremos al menú "Pistas>>Mezclar y generar nueva pista" y con esto se generará una nueva que se vera cómo una línea. En esta ocasión no es necesario alinear los inicios de las pistas puesto que eso ya lo hice (nuevamente puedes revisar el post donde comparé MP3 y FLAC).

Cómo el archivo resultante es "silencio" podemos afirmar que ambas pistas son iguales, solo que, la ventaja del archivo FLAC es que pesa casi la mitad que el archivo WAV.

Y bien, por ahora es todo, en el siguiente post ahora si veremos cómo importar nuestros discos al formato FLAC.

Los leo luego.

El Video (AUDIO) Correcto #7 - Un poco mas sobre el audio.

 Hola de nuevo a todos, el día de hoy vamos a ver un poco mas sobre los archivos FLAC.

imagen tomada de: https://www.revistagadgets.com/2017/04/04/audio-hi-res-la-nueva-linea-audifonos-pioneer/


Cómo muchos de ustedes sabrán, me gusta mucho oír música (música de verdad y no "regeton"), pero siempre había usado equipo de "baja calidad" (y solo por nombrarlo de alguna manera). Pero no hace mucho tiempo, visité un lugar donde se exponían diferente sistemas de audio, desde los mas sencillos; cómo bocina bluetooth; hasta los mas complejos; llámese audio de estudio.


Dentro del mismo lugar había un apartado para los audífonos, de inmediato fui a revisar, y había varios para probar. Cada uno tenia la ficha que describía cuales eran sus características, pero hacían un fuerte énfasis en la frecuencia de respuesta de cada uno.


Primero probé los que ofrecían una respuesta de 20 hasta 20000Hz, justo cómo la mayor parte de audífonos son, la calidad era aceptable, mucho de los audífonos que he tenido cumplían con esa frecuencia y todo parecía aceptable. Los siguientes tenían una respuesta de 20 hasta 32000Hz, la misma calidad que los audífonos que siempre usaba, y justo cómo los anteriores, todo funcionaba bien, y a mi gusto, nada podía superar la calidad. En la siguiente mesa había unos audífonos con una respuesta de 20 hasta 40000Hz... había vivido engañado todo el tiempo, siempre me habían dicho que el oído humano no era capaz de oír frecuencias mas allá de los 32000Hz, pero al momento de probar esos, de inmediato me di cuenta que, si bien es cierto que el oído humano está limitado a ciertas frecuencias, el hecho es que cada persona es diferente y hay quienes alcanzan un rango auditivo mayor al de otros. En mi caso es muy difícil decir hasta "donde puedo escuchar", ya que nunca he hecho un estudio que sirva para eso, pero no había duda de que esos audífonos "sonaban mejor" que los otros, por lo que decidí conseguir unos.


Finalmente cosegui unos audifonos edifier w820nb plus que cuestan poco y tienen la calidad superior a los que ya tenía. 

Pero para poder disfrutar de un buen audio, no solo basta con tener los audífonos, también hay que tener un dispositivo compatible y los archivos de audio adecuados. Por fortuna para mi, aun soy de la vieja escuela y tengo mi colección de discos guardados. Normalmente lo que hacia era utilizar mi reproductor de CD (si, en 2023 aun sigo usándolo), pero el inconveniente que encontré, es que la única salida que tiene, es el plug tradicional de 3.5 mm, mientras que los audífonos soportan bluetooth y USB-C.

Para poder escuchar mis discos decidí crear una copia  de ellos, pero no en mp3, porque ya en ocasiones anteriores he hablado de ciertas desventajas que este tiene con respecto a FLAC, detalles que puedes encontrar en un post que hice hace un buen rato.




 Y bien, por ahora es todo, en los siguientes post veremos detalles de cómo importar la música en FLAC, pero además entraremos en detalles técnicos para poder leer y editar los metadatos de los archivos; para mantener todo mas o menos organizados (al igual que lo hicimos con MP3).

Los leo luego.

Cumplimos 7 años -_-!!!!

 

Hola de nuevo a todos, el dia de hoy solo escribo para recordar que un dia cómo hoy pero de hace siete años, nació el blog de Xwork. Si bien es que ha habido altas y bajas; sobre todo bajas hablando del blog; solo quiero decir que ya estoy trabajando para continuar con el plan de un post al mes.

En tiempos recientes, he tenido que atender otros asuntos y contrario a lo que se podria pensar, basados en el estado del blog; realmente estoy disfrutando el momento y por eso es que lo he descuidado, pero cómo todo, estoy tratando de encontrar el balance entre haer lo que debo y lo que me gusta (que casí van de la mano).

Por eso nuevamente quiero agradecer a todos los que visitan y recordarles que sigan al pendiente que esto seguirá mientras no haya ningun impedimento.

Hay varios proyectos listos, solo hay que esperar un poco

Saludos y nos seguimos leyendo.


Vamos a programar #101 - Operaciones a nivel de bits en Python y tablas de verdad.

 Hola de nuevo a todos, el día de hoy vamos a ver mas operaciones a nivel de bits.


Hace algunos días alguien me pregunto que si era posible usar operaciones a nivel de bits en Python, la respuesta sencilla es: si. Pero ¿Cómo es que trabaja cada una y cuales son las que están disponibles? Anteriormente vimos cómo es posible usarlos en C# y si bien son esencialmente lo mismo, vale la pena revisarlas por separado. En este post veremos las operaciones disponibles SOLO para Python.


En Python disponemos de las siguientes operaciones:

  • Or (o) "|"
  • XOr (o exclusivo) "^"
  • And (y) "&"
  • Shift left (desplazamiento a la izquierda) "<<"
  • Shift right (desplazamiento a la derecha) ">>"
  • Not (inverso) "~"

Or "|"

El operador "|" aplica la operación O entre dos números, hay que recordar las tablas de verdad y recordar que que se produce un valor verdadero cuando uno u otro de los valores son verdaderos.

  • Verdadero O Verdadero = Verdadero
  • Verdadero O Falso = Verdadero
  • Falso O Verdadero = Verdadero
  • Falso O Falso = Falso
Que es lo mismo:

  • 1|1 = 1
  • 1|0 = 1
  • 0|1 = 1
  • 0|0 = 0
Si escribimos lo anterior en la consola de Python, comprobamos que es correcto.


XOr "^"

El operador "^" aplica la operación O Exclusiva a dos números, de nueva cuenta, tomado las tablas de verdad tenemos:
  • Verdadero OEx Verdadero = Falso
  • Verdadero OEx Falso = Verdadero
  • Falso OEx Verdadero = Verdadero
  • Falso OEx Falso = Falso
Que es lo mismo:
  • 1^1 = 0
  • 1^0 = 1
  • 0^1 = 1
  • 0^0 = 0


And "&"

El operador "&" aplica la operación Y a dos números y tiene una tabla de verdad como la que sigue:
  • Verdadero Y Verdadero = Verdadero
  • Verdadero Y Falso = Falso
  • Falso Y Verdadero = Falso
  • Falso Y Falso = Falso
Que es lo mismo:
  • 1&1 = 1
  • 1&0 = 0
  • 0&1 = 0
  • 0&0 = 0


Shift Left "<<"

El operador "<<" mueve a la izquierda una secuencia de bits tantas veces como el número del lado derecho del operador lo indique.

Para que quede un poco mas claro, tomemos como ejemplo el número 76 decimal, cuya representación en binario es 1001100 y lo queremos desplazar a la izquierda dos lugares, entonces tenemos:
  • 76 <<  2 = 304
Pero ¿por que? Para tener una visión mas clara de que es lo que sucede, veamos la representación binaria de la misma operación
  • 1001100 << 10 = 100110000
Si observas de manera detenida, veras que la secuencia "1001100" se movió a la izquierda, pero como no había mas números, simplemente se agregaron dos ceros para completar. En Python podemos crear el código siguiente para probar que estamos en lo correcto.

MiNum = 76

print (MiNum)
print("{:b}".format(MiNum))

MiNum <<= 0b10

print(MiNum)
print("{:b}".format(MiNum))

    

Shift Right ">>"

El operador ">>" mueve a la derecha una secuencia de bits tantas veces como el número del lado derecho del operador lo indique.

Retomado número 76 pero ahora supongamos que los queremos desplazar  cuatro lugares a la derecha, entonces tenemos:
  • 76 >> 4 = 4
Nuevamente revisemos los bits para entender que es lo que sucede:
  • 1001100 >> 100 = 100
Si observamos bien vemos que en efecto, todos los bits se desplazaron a la derecha, pero cómo en este caso llegamos al limite derecho, todos los bits sobrantes se descartaron. En Python podemos crear el código siguiente para probar que estamos bien:

MiNum = 76

print (MiNum)
print("{:b}".format(MiNum))

MiNum >>= 0b100

print(MiNum)
print("{:b}".format(MiNum))



Not "~"

El operador "~" simplemente invierte una secuencia de bits, hay que tomar en cuenta que numero estamos usando, y dependiendo del mismo, Python usará mas o menos bits para guardarlo en memoria, pero además hay que tener en cuenta que al aplicar el operador a números con signo (y no digo -1 o algo por el estilo, sino a los números enteros con signo donde un byte se utiliza para indicar si el número es negativo o no) este invertirá toda la secuencia por lo que si esperamos que; por ejemplo; 10 en binario lo invierta en 01 no será así.

Para apreciar un poco más lo que sucede, tomemos el número entero de 8 bits 127, cuya representación en binario es 01111111 y es importante considerar el cero a la izquierda, ya que este nos dice que es un número positivo; al aplicar el operador ~ tenemos la secuencia de bits 10000000 que representa al número decimal -128.

Y bien, por ahora es todo, en el siguiente post veremos algunos ejemplos de la vida real en donde saber usar la operaciones a nivel de bits es de mucha ayuda.

Los leo luego

Inútil apps #5 - Visualizer V3 (parte 3)

Hola de nuevo a todos, después de tomar el sueño eterno (que en la actualidad es de seis a nueve meses!!) Por fin regresamos a terminar con los asunto pendientes y a tratar de aprender mas en el proceso. En el último post, estábamos fabricando unas luces que prenden y apagan al ritmo de la música.

Para poder comenzar vamos a ver el diagrama, esta disponible para su consulta en el sitio de OSHWLab, el proyecto puede ser visto en línea o puedes descargarlo para poder abrirlo en Eagle o Altium y antes de empezar te recomiendo revisar las primeras dos partes de proyecto, en la primera hablaamos sobre cómo amplificar la señal usando el circuito integrado LM358 y en la segunda parte, vimos cómo se hacen las conexiones para el LM3915.

Una vez dicho lo anterior, veamos todas las partes electricas que necesitaremos para el proyecto.

Una cosa mas antes de continuar con la lista de partes, todos los pines que tengan el prefijo "H" (Por ejemplo H1, H2, etc) Y también los llamados "AUDIOINR" y "AUDIOINL" los omitiré de la lista, ya que en lugar de soldar pines, ahí soldaré directamente los cable y dependiendo de cada quien, se pueden poner los pines o no.

ahora si, veamos la lista de componentes:
MARCAValor
R1,R4,R9,R1010k
R2,R51k
R3,R6200k
R7,R8680
C1,C210uF
D1,D21N4007
U1LM358
U2,U3LM3915
LED1,LED2,LED3,...,LED20 Diodo LED 5mm
POT1Potenciómetro 100k
BUCK1Buck converter

Nuevamente sugiero que revises la parte 1 y la parte 2 de este proyecto para poder entender el "porqué" de cada valor. Los circuitos los pedí por JLCPCB y llegaron en tiempo y en forma (nadie me paga por decir lo anterior), recomiendo ampliamente el ordenarlo, pero si no confías en este tipo de servicios, también es posible hacerlo a mano en placas de prototipo.

Una vez hechas las conexiones del diagrama, es necesario explicar para que sirven todos los pines.
  • AUDIOINR
    • Sirve para conectar el audio, el canal derecho es recomendado, en el pin que tiene forma de cuadrado o PIN1 conectamos la parte positiva del audio, el pin 2 no se conecta y el pin 3 va al negativo del audio.
  • AUDIOINL
    • Igual que el anterior, sirve para conectar el audio de entrada, el canal izquierdo es el recomendado.
  • H1
    • Comparte las conexiones del pin 1 y tres de los pines "AUDIOINR", pero además, en este se encuentra la salida regulada del audio que se conecta a una entrada del LM358.
  • H2
    • Comparte las conexiones del pin 1 y tres de los pines "AUDIOINL", pero además, en este se encuentra la salida regulada del audio que se conecta a una entrada del LM358.
  • H3
    • Es la entrada de 5v
  • H4
    • Es la entrada de 12v
  • U5 y U4
    • Son los jumpers para seleccionar el modo punto o barra del LM3615
Para controlar el nivel del audio, usamos un potenciómetro de 100k, al inicio planee ponerlo en la placa pero debido a que mi visión fue cómo la del prototipo (o la foto de arriba). El potenciómetro, debe de ir en una de las paredes del gabinete, por lo que es necesario usar los cables. Para que la detección funcione, necesitamos hacer las conexiones cómo sigue:

Y la razón por la que están compartidas las conexiones es simple, en mi caso, el las terminales del potenciómetro están conectadas a H1, pero queda libre "AUDIOINR" para poder conectar mi amplificador de audio y poder escuchar, algunos usan un plug de doble salida.

Para alimentar el circuito, se pueden usar fuentes de 5 hasta 24v, y se conectan a H4, pero además es necesario usar una fuente adicional para obtener un voltaje inferior y conectarlo a H3. Seguramente te estás cuestionando ¿para qué?. La respuesta es simple, supongamos que alimentamos a H4 con 5v, este voltaje se va a usar para alimentar el integrado LM358 que hace la amplificación, pero si recordamos, el LM358 no es capaz de sacar un voltaje igual al que se usa para alimentarlo, es decir si amplificamos 0.2v diez veces, tendremos una señal de 2v a la salida, ahora si por ejemplo, tomamos 0.49v y le aplicamos el mismo novel de ganancia, tendríamos a la salida del LM358 4.5v (no exactamente); la idea central de todo esto, es que el voltaje siempre será menor al que usemos de alimentación y a la hora de ingresarlo al LM3915 no seria suficiente para cubrir el rango de este que iría de 0v a 5v. Para solucionarlo, decidí usar un voltaje diferente e inferior para alimentar al LM3915, retomando los 5v de ejemplo, si usamos ese, a H3 lo podemos alimentar con 3.3v usando el buck converter (incluso usar el LM7803) y con eso aseguramos que el rango vaya de 0 3.3v, asegurando que la señal siempre podrá cubrirlo. La configuración que yo uso es 12v para H4 y 5v para H3

Finalmente para U4 y U5, si se hace un puente para cada una, es decir si los pines de U4 los unimos y hacemos lo mismo con U5; activaran el modo barra, si los dejamos abiertos, el LM3915 trabajará en modo punto.



Y bien, por ahora es todo, es cierto que pasaron momento difíciles (se que habrá algunos preocupados) en el blog pero planeo seguir con esto lo mas que se pueda. y por cierto, dejo un video del proyecto en acción.


Cómo de costumbre, los leo luego.

Cumplimos 6 años.

Un día cómo hoy pero del 2016, nació el blog de Xwork y cómo cada año hay que celebrar; pero no en esta ocasión. Hoy solo rendiremos tributo a los que se adelantaron en el camino y solo esperan a que nos reunamos con ellos en la nada.




Att Xwork. Nos seguimos leyendo.

Inutil apps #5 - Visualizer V3 (parte 2)

 Hola de nuevo a todos, el día de hoy vamos a continuar con más de Visualizer V3. En el post anterior, vimos cómo amplificar la señal de audio para que el nivel de las luces no dependa totalmente del volumen del audio, el día de hoy vamos a ver cómo hacer las pantallas de LEDs usando el viejo y confiable LM3915.



Las conexiones a seguir son realmente simples, para ello primero veamos el diagrama siguiente:



Las conexiones son:

  • Pin 1 - Salida de LED.
  • Pin 2 - Tierra.
  • Pin 3 - VCC (3 ~ 35V).
  • Pin 4 - Divisor bajo
  • Pin 5 - Input
  • Pin 6 - Divisor alto.
  • Pin 7 - Referencia de salida.
  • Pin 8 - Ajuste de referencia.
  • Pin 9 - Selector de modo.
  • Pin 10 ~ Pin 18 - Salida de LED's
Si recuerdas del post inutil apps #4 - Visualizador de sonido y comparas los diagramas, verás que son prácticamente iguales, excepto por una sola conexión, en este caso el pin 6, lo conectamos a 5v, probablemente te estés preguntando ¿para que? y la respuesta es simple: así tenemos un mejor control de cual es el marco de trabajo.

En el post anterior vimos una de la aplicaciones de los amplificadores operacionales, en ese caso lo usamos cómo amplificador, pero es posible usarlo cómo comparador y el LM3915 hace uso de ese comportamiento.


Si observas detenidamente , todas las salidas son las salidas de los amplificadores operacionales, mientras que las entradas "positivas" se conectan a una serie de resistencias que van desde el pin 4 al pin 6, si recuerdas bien, esta configuración es un divisor resistivo y usarse resistencias del mismo valor en cada paso, tendremos que el voltaje será proporcional y será determinado por los valores que se usen en los pines 4 y 6. Así que si conectamos el pin 4  a tierra y el pin 6 a 5v, tendremos en cada paso 0.5v.

En la entrada negativa tendremos el voltaje que se aplique al pin 5, que en nuestro caso, será el voltaje proporcional al nivel de sonido. La forma en que  se usa es: cuando a un amplificador operacional se le aplica un voltaje mayor en la entrada negativa, la salida de este tendrá un voltaje igual al aplicado a la entrada negativa, en caso contrario (si el voltaje es mayor en la entrada positiva), la salida tendrá el voltaje de la entrada positiva.

Si tomamos en cuenta quu aplicamos un voltaje de 5v en el pin 5 y el pin 6 esta conectado a 5v, eso implica que todos los led prenderán, pero además eso aplica también para cuando el voltaje es mayor a 5v (valga la redundancia). Ahora si por ejemplo; aplicamos 2.7v al pin 5 mientras los pin 4 y 6 siguen conectados igual, del primero al quinto LED son los que cumplen la condición de tener un voltaje mayor en la entrada negativa por lo que se encenderían.

Y bien, por ahora es todo, en el siguiente y ultimo post, agregamos los componentes adicionales y pondré a disposición de cualquiera los diagramas para la fabricación de los PCB, que recalco, ya han sido probadas y están listas para usarse.

Los leo luego.

Inutil apps #5 - Visualizer V3 (parte 1).

 Hola de nuevo a todos, despues de un tiempo de ausencia, es hora de retormar el curso y crear un poco de contenido para el blog. En esta ocasion vamos a hacer mejoras para las luces audio-ritmicas que en algun momento hice. Si bien funcionan bien, había algunos detalles por arreglar para que funcionanran de manera adecuada. El proyecto se va a dividir en dos partes en donde detallaré cómo es que funciona, pero ademas pondré a disposicion de cualquiera que quiera ordenar las placas PCB, los archivos gerber del diagrama que veremos. Este a diferencia del velocimetro, ya esta probado, por lo que puedes encargarlos sin el temor de que algo funcione mal.


Si hacemos un poco de memoria (o revisamos el post), veremos que todo funciona cómo es debido, pero tiene un problema un tanto grave: ¡¡No tiene control de volumen!!, por lo que los niveles que se muestran en las luces, dependen directamente del nivel de volumen de la fuente de sonido, pero no solo eso, además el sonido tenía que estar amplificado para poder ver algo. Al inicio lo pensé así por la sencilla razón que no tengo un amplificador grande; y eso fue hasta hace poco.

Ahora cómo el sistema de sonido es mas grande, al subir un poco el volumen , este ya alcanza un nivel considerable de ruido y aun así no se alcanza a iluminar todas las luces del diseño pasado. La solución es simple, debemos de amplificar por separado el audio para las luces. Para poder conseguir esa tarea, vamos a usar un amplificador operacional.

Para esta tarea cualquier amplificador operacional funciona, pero en mi caso voy a usar el circuito integrado LM358.

Para poder usarlo, debemos de hacer las conexiones cómo sigue:


Cómo podrás observar, usamos tres resistencias. R3 sirve para establecer a tierra cómo referencia entre la señal que ingresamos, R1 y R2 se utilizan para establecer la ganancia que va a tener. Hay que tener en cuenta que este tipo de conexión conocida cómo "non inverting" sirve para amplificar la ganancia de la señal (hay varios tipos de configuraciones, pero eso esta fuera del tema del post), pero además existe una formula que nos sirve para calcular la ganancia.

Tomando en cuenta que los voltajes de salida en los conectores de audio de la mayoría de los dispositivos esta en un rango de hasta 2.2v, debemos de tratar de elevarlo al menos diez veces. En la practica he tenido problemas asumiendo esto, debido a que no poseo un osciloscopio, me resulta difícil obtener una medición exacta, pero podemos aquí usar una ganancia de 200, aunque parezca algo exagerado, debemos de tener en cuenta la amplificación no va a ir mas allá del voltaje de entrada que le demos al amplificador, por lo que si lo alimentamos con 12v, en el peor de los casos, tendremos 11.7v aproximadamente cómo máximo a la salida (eso dependiendo del amplificador, pero una vez mas, es un tema que merece un post a parte). Pero además 2.2v es el máximo por lo que tener al mínimo el volumen podemos esperar valores en el rango de los milivolts y si por ejemplo; tenemos 0.01v, al amplificarlo 200 veces, tendremos 2v

Ahora veamos los cálculos.




Si queremos saber cual es el valor de las resistencias que debemos de usar, bastará con realizar la sustitución de dos valores, si por ejemplo queremos una ganancia de 201, pero además tenemos una resistencia de 1k para R1 podemos sustituir en la formula:





Y después simplemente resolvemos:


Es recomendable que se usen valores en el rango de los kilo ohms para R1 de esta forma evitamos algunos problemas, pero además, también es recomendable mantener la ganancia no tan alta, una ganancia de 300x es aceptable, pero hay que tener en cuenta que dependiendo del tipo de señal de entrada, del propio circuito integrado y otros factores, se puede introducir "ruido" o distorsión que normalmente no son deseables, pero para este tipo de proyecto, no afecta tanto.

Antes de continuar veamos un ejemplo donde tenemos el valor de R1 que es 100k; y R2 que es 50k; y solo queremos saber cual es la guanacia:


Sabiendo lo anterior, podemos hacer las conexiones al lm358 tomando en cuenta cuales son los pines.


  • El pin 4 se conecta a tierra.
  • El pin 8 se conecta a VCC, en nuestro caso 12v
  • El pin 3 es la entrada, aquí conectaremos nuestra señal de audio.
  • Entre el pin 1 y 2 conectaremos R2 .
  • Entre el pin 2 y tierra, conectaremos R1.
  • El pin 1 es la salida amplificada.
Con las conexiones hechas, tendremos la señal lista para la siguiente parte (y no te preocupes no tardara un mes para salir).


Y bien, por ahora es todo, si bien no hemos aprendido la capacidad real de los amplificadores operacionales, este post sirve cómo una aproximación a ellos. Recuerda que aquí no trato de enseñar los fundamentos de la electrónica, pero a lo mejor en el futuro, hago una explicación mas profunda de todo lo que se puede hacer. Recuerda que en el siguiente post publicaré la parte de las luces, pero además publicaré los esquemas para que puedas fabricar tu propia versión.

Los leo luego.

Vamos a programar #100 - Speedometer M. Versión Final.

 Hola de nuevo a todos, el día de hoy empezaremos a ver la versión final del velocímetro.

Este proyecto fue iniciado mas o menos por el 2018 y ha sufrido una serie de cambios a lo largo del tiempo, si bien la última versión que fue publicada funcionaba bien, poco a poco se fueron agregando funciones para hacerlo funcionar de manera optima con el mínimo de hardware posible (de ahí que nunca le agregue ningún tipo de botón). Finalmente, tras días de pruebas y pruebas, he decidido finalizar con este proyecto porque finalmente ha alcanzado el nivel de confiabilidad para poder usarse en el día a día.


Primero que nada, veamos el código que hace funcionar a "Speeedometer M"


// Incluir la libreria para la pantalla
#include <LiquidCrystal.h>
// Pines usados en la pantalla extraido de los ejemplos incluidos en la libreria
const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 9, d7 = 8;
// iniciar el objeto LiquidCrystal
LiquidCrystal lcd(rs , en , d4 , d5 , d6 , d7);
// Este es el valor que debes de modificar para que funcione correctamente
// Puedes ver instrucciones en https://xworkforall.blogspot.mx/2018/03/vamos-programar-49.html
const float Llanta = 1.9572;
//Algunas variables
const int HallSensor1 = 3;
const int LED1 =  7;
const int LED2 = 6;
const int LED3 = 5;
int Vuelta = 0;
unsigned long OldTime = 0;
float Distancia = 0.0;
float Speed = 0.0;
int ledState = LOW;
int VoltSensor = 0;
float BattVolt = 0.0;

// v=99.99
char BuffVelocity[15];
//d=999.99
char BuffDistance[15];
//R=999999
char BuffRevolution[15]; 
//V=4.2
char BuffBattery[15];

//Incializar todo
void setup() {
  //Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("@XWork");
  pinMode(HallSensor1, INPUT);
  attachInterrupt(digitalPinToInterrupt(HallSensor1) , GetVelocity , LOW);
  pinMode(LED1 , OUTPUT);
  pinMode(LED2 , OUTPUT);
  pinMode(LED3 , OUTPUT);
}

// Calcular la velocidad
void GetVelocity() {
  if (millis() - OldTime > 70) {
    Speed = Llanta / ((float)( millis() - OldTime) / 1000) * 3.6;
    OldTime = millis();
    Distancia = Distancia + Llanta / 1000;
    Vuelta += 1;
    if (ledState == LOW)
      ledState = HIGH;
    else 
      ledState = LOW;
  }
}
//Bucle principal
void loop() {
  VoltSensor = analogRead(A5);
  BattVolt = (VoltSensor * (10.0 / 1023.0));

  dtostrf(Speed , 5 , 2 , BuffVelocity);
  dtostrf(Distancia , 6 , 2, BuffDistance);
  sprintf(BuffRevolution , "R=%6d", Vuelta);
  dtostrf(BattVolt , 5 , 1, BuffBattery);
  
  lcd.setCursor(0, 0);
  lcd.print("d=");
  lcd.setCursor(2 , 0);
  lcd.print(BuffDistance);
  
  lcd.setCursor(9, 0);
  lcd.print("v=");
  lcd.setCursor(11, 0);
  lcd.print(BuffVelocity);
  
  lcd.setCursor(0,1);
  lcd.print(BuffRevolution);
  
  lcd.setCursor(9,1);
  lcd.print("V=");
  lcd.print(BuffBattery);
  
  digitalWrite(LED1 , ledState);
  digitalWrite(LED2 , ledState);
  digitalWrite(LED3 , ledState);
  
  if ((millis() - OldTime) > 3000){
    ledState = LOW;
    Speed = 0.0;
  }
}


Si haz seguido el proyecto desde el inicio, te darás cuenta que la mayoría de las funciones han cambiado un poco y algunos de los elementos que en ocasiones usamos para algunos post, los retomamos para llegar a está versión. Antes de continuar, voy a responder a unas cuantas preguntas que surgieron durante todo el proceso. La primera de ellas: ¿Cuánta es la máxima distancia que se puede alcanzar con el diseño original? La respuesta es relativamente sencilla, ya que usamos seis espacios de la pantalla y usamos tres para los enteros, una para el punto y dos para los decimales; la máxima distancia posible es 999.99 km, que es mas que suficiente para la mayoría de las personas, pero aquí es donde viene la parte "truculenta". La parte donde se llevan la cuenta de las revoluciones, el máximo posible es de 999,999 vueltas, en el caso de una llanta 24x2.25, la circunferencia es de 1.95m por lo que al multiplicar por el número de vueltas máximo obtenemos 1,949,998.05m máximo o lo que es lo mismo 1949km y esto bastaría para desbordar la parte de la distancia.

Otro dato que cambio fue la información que se usa para la batería. En algún momento del desarrollo, pensé en incluir un icono de batería, pero cada una de las baterías son diferentes y por lo tanto no es factible escribir el código ya que es casi una garantía que la pila no es igual en la mayoría de los casos. y por ejemplo, la pila que yo uso era de un teléfono y traía consigo una protección que corta la corriente cuando la pila alcanza 2.5v, pero una pila Sony VTC6 recomienda que el voltaje nunca baje de los 3v.

Es posible usar una pantalla de 20x4, pero la 16x2 es mas compacta y además, permite tener todo de manera lo mas sencilla posible.

Por último, he actualizado el proyecto en easyeda y he hecho el PCB de la mejor manera posible y es posible ordenarlos, pero quiero resaltar que aun no los he probado (o no al momento de que esto fue escrito) y eso se debe a que van a tardar un par de semanas. De todos modos, se pueden seguir las conexiones del diagrama y hacerlo en un placa perforada a mano.

O mandarlas a fabricar (que repito, aun no he probado.)

Y bien por ahora es todo, tal y cómo lo mencioné al principio, ya no voy a publicar mas actualizaciones, pienso que todo funciona cómo debe, pero además todo está disponible para que cada quien lo modifique a cómo lo necesite, recuerda que puedes hacer el pedido desde JLCPCB y además puedes descargar el código desde mi DropBox para que lo modifiques a tu gusto.

Los leo luego