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.
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.
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.
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.
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.
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
aptinstall 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.
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.