miércoles, 26 de mayo de 2021

ESP32 - SENSORES II , BMP180, XFW-HX711.

ESP32-  SENSORES II

BMP180
XFW-HX711


En el anterior artículo ESP32 - SENSORES había realizado con el ESP32 un visualizador de sensores, en este proyecto añado otros dos, BMP180, XFW-HX711.
El BMP180 es un detector de presión, y el XFW-HX711 es un detector de peso.
Este montaje también lo he realizado con un arduino nano, bmp180.html , por lo cual no explicare mucho el montaje.
La explicación de la calibración del módulo de peso se encuentra en
bmp180.html .
Para la lectura del BMP180 he utilizado una rutina propia, que al proceder de un arduino, he tenido que modificar el tipo de datos, de int a int16_t, y de long a int32_t .
Por lo demás no he modificado nada al traspasar el programa, salvo los pins de conexión.


Esquema realizado con https://easyeda.com.


Circuito montado.

Peso de 5 monedas de 50 Céntimos.


Visualización de los datos en un navegador.


Diagrama de señales en el
XFW-HX711, convertidor A/D de 24bits.

Este proyecto me ha servido para ponerme en contacto con el ESP32, y ver todas sus posibilidades.
Espero que les haya gustado.


PROGRAMAS Y LIBRERÍAS

Saludos.
Juan Galaz


Bibliografía:

https://naylampmechatronics.com/blog/25_tutorial-trasmisor-de-celda-de-carga-hx711-balanza-digital.html
28/02/2016 - Arduino - Predicción del tiempo. GY-68 - BMP-180.  Predicción
21/02/2016 - Arduino power low - Termómetro máximos y mínimos con gráfica - DS18B20 LCD Nokia PCD8544. Tempe
09/02/2016 - Arduino -Barómetro - Termómetro. GY-68 -  BMP-180. Parte 2 (librería propia). ArduBer
03/02/2016 - Arduino -Barómetro - Termómetro. GY-68 -  BMP-180. Parte 1.  ArduBar
https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/
https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/
https://www.profetolocka.com.ar/2020/07/09/programando-el-esp-32-con-el-arduino-ide/
https://www.prometec.net/presentando-el-esp32/


lunes, 24 de mayo de 2021

ARDUINO - SENSORES - BMP180- XFW-HX711.

ARDUINO - SENSORES

BMP180
XFW-HX711


El otro día me llego dos módulos que había pedido, el BMP180 (un viejo conocido con el cual había realizado 3 proyectos, y el XFW-HX711, un sensor  de peso.
Quería añadir los dos módulos al ESP32, pero quería antes probarlos en un arduino nano.

En primer lugar he realizado el montaje del sensor de presión, que muestra los datos en un OLED y en el terminal serie.
Para este montaje he utilizado el antiguo montaje :
Barómetro - Termómetro. GY-68 -  BMP-180. Parte 2 (librería propia). ArduBer , pero adaptándolo al OLED.
Como se puede observar lo he alimentado con 3V3 , para probar si funcionaría con el ESP32, aunque funciona también a 5V.
Lo bueno de este proyecto es que utilizan los dos módulos el protocolo I2C, lo que facilita mucho el diseño.




PROGRAMA


Como ya tenía montado el circuito de sensor de presión, he añadido el sensor de peso.
Como tutorial he seguido los pasos de:https://naylampmechatronics.com/blog/25_tutorial-trasmisor-de-celda-de-carga-hx711-balanza-digital.html
He añadido una línea donde figura el peso en gramos.
Empezamos explicando un poco el funcionamiento del módulo de pesaje.

Cuando un conductor se estira, su resistencia aumenta. Cuando está comprimido, su resistencia disminuye.
A estas piezas de metal la llamaremos Celdas De Carga.
Esta resistencia se mide con un convertidor A/D de 24bits , HX711, que transmite los dados mediante protocolo serie propio al arduino.

 



Una vez que tenemos montado el circuito, debemos calibrarlo.
El método es utilizar un objeto que sepamos su peso, yo he utilizado uno que antes había pesado en una báscula.
En mi caso había utilizado dos POWER_BANK que en total pesaban 133 grs.
Lo ideal es utilizar un peso que se ajuste al máximo de peso de la celda de carga, no es mi caso.
Ahora con el siguiente programa mido el valor que nos devuelve el módulo.

#include "HX711.h"
const int DOUT=2;
const int CLK=3;

HX711 balanza;
void setup() {
  Serial.begin(9600);
  balanza.begin(DOUT, CLK);
  Serial.print("Lectura del valor del ADC:t");
  Serial.println(balanza.read());
  Serial.println("No ponga ningún objeto sobre la balanza");
  Serial.println("Destarando...");
  balanza.set_scale(); //La escala por defecto es 1
  balanza.tare(20);  //El peso actual es considerado Tara.
  Serial.println("Coloque un peso conocido:");
}

void loop() {

  Serial.print("Valor de lectura: t");
  Serial.println(balanza.get_value(10),0);
  delay(100);
}


Con un peso de 133 grs nos proporciona una medida de 261425 .
Con el dato obtenido  hacemos un cálculo:
    261425:0.133 grs =1965601
El valor obtenido de la operación lo colocamos en:

    #define AJUSTE 1965601
    balanza.set_scale(AJUSTE);

Con esto ya podemos medir el peso de un objeto.
Debemos saber que cuando se reinicia el programa toma un primer peso que coloca como tara, para luego restarlo del peso total.



Peso de una POWER-BANK de 65grs, que corresponde al peso real.




Detalle de la celda de carga.



Peso de dos monedas de 50 CENT, que corresponde al valor real.
El circuito funciona muy bien, con una precisión alta.

Espero que les guste este proyecto.

PROGRAMA Y LIBRERÍA

Saludos.
Juan Galaz

Bibliografía:
https://naylampmechatronics.com/blog/25_tutorial-trasmisor-de-celda-de-carga-hx711-balanza-digital.html
28/02/2016 - Arduino - Predicción del tiempo. GY-68 - BMP-180.  Predicción
21/02/2016 - Arduino power low - Termómetro máximos y mínimos con gráfica - DS18B20 LCD Nokia PCD8544. Tempe
09/02/2016 - Arduino -Barómetro - Termómetro. GY-68 -  BMP-180. Parte 2 (librería propia). ArduBer
03/02/2016 - Arduino -Barómetro - Termómetro. GY-68 -  BMP-180. Parte 1.  ArduBar



viernes, 21 de mayo de 2021

Amplificador Audio PWM

Amplificador Audio

PWM


Un día navegando por la tienda de Aliexpress encontré un circuito amplificador que prometía mucho:

AMPLIFICADOR DE POTENCIA DE Audio estéreo Digital TPA3110 XH-A232, placa de 30W + 30W, 2,0 canales, CC de 8-26V, 3A, C6-001

Los que tenemos unos años, y hemos realizado algún que otro amplificador de audio, sabemos que debemos colocar disipadores para proporcionar esa potencia, y según el anuncio no hacía falta, o servía uno pequeño.
Mis dudas eran muchas hasta que lo probase, además su precio no llegaba a 3€ con portes.

Una vez pedido y recibido, lo probé.
Me sorprendió lo pequeño que era el el circuito junto con el disipador. Lo alimenté todo con un alimentador de 12V procedente de un viejo módem, y cual fue mi sorpresa lo bien que sonaba, y lo poco que se calentaba a una potencia considerable. Tenía que averiguar el misterio del circuito.
El misterio es que era un: Stereo Amplifier Family
Class-D .
Se transforma la señal de audio en una señal digital PWM , con una frecuencia alta, entre 200KHz y 500KHz.
En la salida al altavoz se coloca un filtro de alta frecuencia para solo dejar pasar el componente de audio.


Si solo se quiere utilizar una sola alimentación, se utiliza un puente en H.

Con la conmutación rápida conseguimos que la perdida en calor sea muy baja, cuando la I es alta, el V es baja y a la inversa. Además al utilizar transistores MOS conseguimos una menor caída de tensión, y por lo tanto una perdida en calor mínima.

Mi intención en este proyecto es realizar algo parecido con componentes normales.

Lo primero es realizar una onda en forma de diente de sierra de una frecuencia de alrededor de 200KHz
Para este trabajo no me he complicado mucho, utilizo un 555.

He de decir que en el circuito final, he eliminado la linealidad de la onda, eliminando la parte de la corriente constante, transistor y zéner. Aunque afecta a linealidad de la onda, no es demasiado apreciable al oído.

Para generar la onda PWM debemos comparar la onda de diente de sierra con la señal de audio, y para esto utilizamos un amplificador operacional del tipo comparador. He probado con un integrado LM324, pero no funciona, este tipo de integrados está preparado para funcionar a frecuencias de audio, pero al intentar comparar señales de frecuencias de 200KHz no lo hace bien, debido a los circuitos de realimentación interna.
Para comparar las señales he utilizado el CHIP LM393.

El circuito final queda de la siguiente forma.


La señal PWM controla un transistor tipo Darlington, que a su vez hace sonar el altavoz a través de un filtro LC.
El circuito funciona, pero como solo funciona en una sola parte de la onda, el consumo es grande si no se ajusta muy bien.

Debemos ajustar el ancho de la onda al mínimo, sin que se produzca distorsión.

Ahora utilizaremos un punte en H . Para este propósito utilizamos
el CHIP MX1616 , preparado para motores.


 
Utilizamos un inversor 4049 para invertir las señales del puente en H .

Aquí ya ajustamos la onda para que en modo reposo, los periodos alto y bajo sean iguales.


Circuito de pruebas montado.

El resultado es bastante bueno sin demasiados ajustes, y los componentes no se calientan.
Los que tenemos algunos años, nos parece asombroso este tipo de amplificadores, además de hacernos ver que la electrónica tiene muchos caminos para conseguir un propósito.


Saludos.
Juan Galaz

Bibliografía:
https://es.wikipedia.org/wiki/Amplificador_Clase_D
http://www.electronicworld.com.mx/uncategorized/circuito-generador-de-senal-pwm-con-amplificadores-operacionales/
http://hifi.vije.net/classd/Site/Aaron_site/clased_PWM/amplificador_de_clase_d_en_modo_pwm_mx.html
https://www.maximintegrated.com/cn/design/technical-documents/app-notes/3/3977.html
http://electgpl.blogspot.com/2019/04/amplificador-de-audio-clase-d.html



sábado, 8 de mayo de 2021

FABRICACIÓN Y PUESTA EN FUNCIONAMIENTO DE UNA MÁQUINA CNC-ROUTER

  

FABRICACIÓN Y PUESTA EN FUNCIONAMIENTO DE UNA MÁQUINA CNC-ROUTER

Ing. Alfredo Segura
México, 2015


Luego de observar atentamente los proyectos de otros entusiastas del CNC-Router, me di a la tarea de fabricar uno para mi. Así que compre una lámina de Aluminio de 6.5 mm y una barra cuadrangular de Aluminio de 10 x 10 mm e hice los trazos correspondientes para cortar las partes:



El CNC-Router es de cama fija y lo que se transporta es la torre que contiene el Eje Y. Así que el movimiento de esta torre constituye el Eje X también. El Eje Z está montado también en la torre.

Adquirí motores paso a paso (PAP o StepMotor) tipo bipolar, es decir con 2 bobinados independientes, por lo que tenemos 4 terminales de excitación.

Para el desplazamiento del Eje X, usé 2 correderas de cajón de 40 cm, las cuales soportan firmemente la torre, pero tienen un suave movimiento.

El desplazamiento del Eje Y sobre la torre es por medio de guías de barras de acero blanco y bujes de bronce, extraídos del deshuese.

Finalmente el desplazamiento del Eje Z, que es vertical, se hace también por medio de barras guía de acero blanco.

Toda la transmisión de movimiento se logra a través de los motores PAP con sus respectivos coples y husillos sinfín de fábrica de 8 mm con tuercas de bronce del mismo paso que ajustan casi perfectamente, a pesar de que no son de baleros.



Sobre el mecanismo del Eje Z se puede montar, ya sea una placa que sostiene un Laser de 05 Watts tipo FB-03 o un Motor Spindle de altas revoluciones con su soporte de aluminio macizo y tornillería.





Para la electrónica usé los Drivers Polulu que contienen el CI 4988ET. Uno por cada Eje (X, Y, Z) para el caso de usar Spindle Motor. Para el caso del Laser FB-03 utilicé un PIC 12F683 y una tarjeta de interfaz para proporcionar 12VCD, GND y una señal PWM producida por el PIC, así como 2 botones de presión para calibrar el Duty Cycle (Aumentar/Disminuir).



Para producir un grabado en Láser o con fresa, recurrí al programa Mach3, el cual debe ser configurado adecuadamente, en los siguientes aspectos:


1.- Usar el puerto paralelo LPT1 con dirección Hex 0x378 (no uso un segundo puerto paralelo)

2.- Configurar los pines del conector del puerto paralelo para ofrecer las salidas de Step y Dir de cada motor PAP, así como de la señal Spindle que hace encender el Láser FB-03.

3.- En ajustes generales, elegir la salida OUTPUT 1 para controla el encendido del Láser a través de una señal de nivel High.

4.- Sintonizar los motores X y Y, para que se ajusten a la velocidad, aceleración y a los pasos por revolución de acuerdo al diámetro de las varillas sinfín y el paso de sus cuerdas. En este caso de Laser no es necesario ajustar el motor del Eje Z. Sin embargo para el Spindle Motor si se hace. El programa de Mach3 tiene todas las herramientas para los ajustes indicados.

5.- Cargar y ejecutar un archivo que contenga el código G de la imagen que se ha de grabar con Laser. Estos archivos pueden tener cualquier extensión, pero yo acostumbro usar *.ngc o *.txt



Para obtener un archivo con Código G recurro al uso del programa de gráficos InkScape, en el cual se diseña en modo de mapa de bits la imagen que debe ser grabada en láser. En el menú correspondiente a Código G, se crean primeramente puntos de orientación y después la generación del código G correspondiente.

 


Para esta tarea es necesario practicar mucho, para saber elegir los bitmaps que sean mas sencillos en cuanto a trazos, ya que al momento de vectorizar, pueden salir miles de vectores, lo que hará que el código resultante sea muy largo, sin que haya necesidad de que así sea. Claro, a menos que la imagen a grabar lo amerite.



Ya generado el código, se guarda en una carpeta y hay que editarlo un poco. Dado que el Láser FB-03 se habilita con un simple pulso del PIC12f683, es conveniente editar Z, inicialmente en 0 y cada vez que vaya a actuar, se declara Z1. Se hace esto en todo el archivo, usando el menú de “reemplazar”. El código comienza con M3 que es el incio del Spindle Motor o de la habilitación del Láser FB-03 y al final del archivo de Código G, hay que garantizar que M5 está puesto hasta el final, para que la máquina CNC-Router regrese al origen, previamente con Z0, es decir Láser apagado.



Se muestran algunas imágenes sobre la fabricación final del CNC-router, así como de un grabado que se hace sobre una pieza de plástico.





Es conveniente hacer grabados con Láser en un taller o en el patio, ya que al quemarse el material sobre el cual se está grabando, despide mucho humo, que puede ser muy molesto y tóxico. Es conveniente hacerle una campana de acrílico con salida hacia el exterior y un pequeño motor a manera de extractor.

Ejemplo del listado de un programa de Código G. Nótese el valor de Z de 0 a 1 y al final M5 al concluir el regreso del Láser (Eje X, Eje Y) al origen.




viernes, 7 de mayo de 2021

Usar tu móvil como Webcam en OBS Linux.

Usar tu móvil como Webcam
en
OBS Linux.


Tengo una colección de cámaras web , y como he podido observar la calidad es muy dispar, si queremos tener una cámara web  buena se necesita gastarse dinero.
Como es normal la mayoría de gente tiene un móvil, y aunque el móvil no sea bueno, la cámara que lleva seguro que es mejor que la webcam que tiene.
Buscando por internet el usar el móvil como webcam bajo Linux encontré esta página:
https://github.com/bluezio/ipwebcam-gst
Explica como mediante dos scripts y la aplicación de móvil IP-WEBCAM podemos usar nuestro móvil como webcam.
Existen dos posibilidades, mediante wifi, o mediante cable usb con ADB. En este caso solo explico como hacerlo mediante wifi.

El primer script   ./install-videochat.sh se usa para instalar un viejo conocido v4l2loopback-dkms que permite crear webcam virtuales.

En un tutorial antiguo de como hacer funcionar OBS en Linux explico como instalar v4l2loopback-dkms.
Para instalar programas debemos ser root.
Desde una consola tecleamos
            su  ->            contraseña
            sudo apt  install v4l2loopback-dkms v4l2loopback-utils
Para probar que funciona listamos los devices de video antes y después de cargar el módulo.
            ls /dev/video*
            sudo modprobe v4l2loopback devices=1 video_nr=5 card_label=VirtualCam exclusive_caps=1
            ls /dev/video*
Veremos que se creó un /dev/video5 virtual.
Para no tener que crearlo cada vez que queramos ejecutar el osb-studio , hacemos que lo cargue automáticamente al iniciar el sistema.
            echo "options v4l2loopback devices=1 video_nr=5 card_label=VirtualCam exclusive_caps=1" | sudo tee /etc/modprobe.d/v4l2loopback.conf
            echo "v4l2loopback" | sudo tee /etc/modules-load.d/v4l2loopback.conf

Como yo tenía ya instalado v4l2loopback-dkms no he utilizado es script ./install-videochat.sh , pero si no lo tienes instalado deberás hacerlo, es tu decisión está emplear el método del script, o utilizar el método manual que emplee yo hace unos meses.

El segundo script usado es ./run-videochat.sh que tiene bastante opciones y se pueden ver con la orden:
 ./run-videochat.sh --help


Usage:
 ./run-videochat.sh [options]

Script for using IP Webcam as a microphone/webcam.

Options:
 -a, --audio            capture only audio
 -b, --adb-path <path>  set adb location if not in PATH
 -C, --no-echo-cancel   do not set up echo cancellation
 -d, --device <device>  force video device to use
 -f, --flip <flip>      flip image
 -h, --height <height>  set image height (default 480)
 -l, --adb-flags <id>   adb flags to specify device id
 -i, --use-wifi <ip>    use wi-fi mode with specified ip
 -p, --port <port>      port on which IP Webcam is listening (default 8080)
 -s, --no-sync          No force syncing to timestamps
 -v, --video            capture only video
 -w, --width <width>    set image width (default 640)
 -x, --no-proxy         disable proxy while acessing IP
     --help             show this help



Lo primero que debemos hacer es ejecutar la aplicación IP WEBCAM en el móvil:
Tiene bastantes opciones, la que debemos ajustar es la resolución de vídeo para que no sea ni muy alta ni muy baja.
Ahora solo nos queda lanzar el servidor en la aplicación.
Podremos observar la imagen junto con una dirección IP que es la que utilizaremos en Linux.



El segundo script es ./run-videochat.sh , es el que crea la webcam virtual.

  ./run-videochat.sh -i 192.168.1.104


Aceptamos y ya tenemos creada la webcam en el directorio /dev/video*
Podemos ver nuestra webcam creada en la mayoría de programas que visualizan webcams como Guvcview o VLC.
También se puede visualizar y controlar en cualquier navegador.




Abrimos el programa OBS y añadimos una fuente de video.



Podemos añadir un audio de escritorio,  seleccionar el sonido del móvil (IP-WEBCAM) , o de cualquier otra fuente como puede ser micrófono o webcam.



Como podemos observar la calidad es infinítamente superior en cualquier móvil respecto a una webcam.
He de decir que hay webcam de mucha calidad, pero son las menos y son muy caras.

El programa OBS ofrece muchas posibilidades como la transmisión en vivo en YouTube o su grabación para su posterior emisión o edición.
Un gran programa, además de multiplataforma.

En todo esto solo hay una pega, este método en OBS no permite usar nuestro vídeo para usarlo directamente con SKYPE o ZOOM.

PROGRAMA ipwebcam-gst

Un saludo.
Juan Galaz


Bibliografía:

https://github.com/bluezio/ipwebcam-gst
https://jrpk.wordpress.com/2020/11/05/smartphone-como-gnu-linux-webcam/



miércoles, 5 de mayo de 2021

AD9833 - Generador de funciones 1Hz a 12MHz - Arduino

AD9833

Generador de funciones
1Hz a 12MHz
Arduino


He realizado varios generadores de frecuencia, con el  CHIP DS1077 y  el LTC6904 / LTC6903.
Al no disponer de un reloj exacto, no pueden generar una frecuencia demasiado exacta.
El AD9833 promete ser mas exacto al utilizar un cristal externo, habrá que verlo.
Existe multitud de proyectos con este CHIP , y lo principal es que existe una librería para arduino.
Para este proyecto se utiliza la librerías: MD_AD9833-main y RotaryEncoder-master.
Con el OLED utilizo mi propia librería que se incluye como olex.h.
Todos los componentes se montan en una breadboard y se conectan.
El AD9833 se conecta al bus SPI, el OLED al bus I2C, y el mando Rotary Encoder a unos pin libres ,2,3,12.
Para las pruebas del
Rotary Encoder utilizo unas resistencias para en caso de error no estropear los pins del arduino. Después de las pruebas las elimino y utilizo las resistencias internas del arduino.


Primeras pruebas utilizando resistencias.


Diagrama del circuito.


Circuito final sin resistencias.


Señal cuadrada generada.

La señal generada puede ser cuadrada, senoidal (redonda), triangular.
El voltaje señal cuadrada es de 5V, las señales senoidal y triangular son de 600mV.
La exactitud de la frecuencia me sorprendió bastante, en señales de 1000Hz puedes variar 1Hz, y mi osciloscopio lo detecta bien.

Espero que les haya gustado este montaje, creo que es un buen generador para tenerlo en el laboratorio.


PROGRAMA Y LIBRERÍAS

Saludos.
Juan Galaz

Bibliografía:

https://github.com/MajicDesigns/MD_AD9833