jueves, 11 de abril de 2024

lunes, 4 de marzo de 2024

Una técnica experimental para hallar el centro de gravedad de una chapa de contorno irregular, de grosor uniforme y densidad homogénea

Consideremos un cuerpo plano, de forma irregular y de grosor uniforme y densidad homogénea, tal como el de la figura, como podría ser, por ejemplo, una forma cortada con un soplete en una chapa rectangular, pongamos que de acero. ¿Cómo podemos determinar su centro de masas, sin hacer cálculos? Para ello utilizaremos el campo gravitatorio.

Colgando el cuerpo de un punto $A$ (cualquiera), y prolongando la línea de la cuerda (o cable) del que queda suspendido, trazaremos sobre la superficie la semirrecta correspondiente con un rotulador o una tiza. Después, bajaremos el objeto y lo suspenderemos colgado de otro punto $B$, repitiendo la misma operación. La intersección de las dos semirrectas es el centro de gravedad $G$ de la chapa con contorno irregular. El centro de gravedad, y en el caso de que el material sea homogéneo en densidad, se corresponde con el centro de masas. $\diamond$

martes, 27 de febrero de 2024

Fracciones de vuelta en un mecanismo divisor. Tallado de engranajes rectos. División indirecta y división diferencial

Una fresadora universal dispone de un cabezal giratorio para realizar divisiones equiespaciadas de gran precisión, que, por ejemplo, sirve para fresar los dientes de los engranajes. Dicho cabezal puede ser simple (cabezal divisor simple), para realizar divisiones sencillas, que denominamos indirectas, o bien de tipo diferencial (cabezal divisor universal), el cual nos permitirá resolver la mayor parte de los problemas que se pueden presentar y para los que no bastase el procedimiento de la división indirecta, que es el primero que vamos a exponer.

Ejemplo de división indirecta
Ejemplo de una fresa módulo para tallar engranajes

Está formado por un mecanismo giratorio, que consta de un conjunto de tres platos intercambiables, cada uno dividido en varios círculos, con el número de agujeritos que se muestra en la tabla de abajo. Para contar el número de agujeros que debemos tener en cuenta en las divisiones, el cabezal divisor dispone de una alidada giratoria cuya abertura (con el número de agujeros seleccionados) se puede fijar. Por otra parte, el husillo del sistema giratorio es tal que mediante, pongamos que con $40$ vueltas enteras de la manivela la plataforma de sujección dé $1$ vuelta entera. A dicho número de vueltas de la manivela que son necesarias para dar exactamente una vuelta de la plataforma de sujección la denominamos constante $k$ del plato deivisor y, en general, no tiene que ser necesariamente igual a $40$.

División indirecta: Queremos fresar los dientes de un engranaje recto que consta de $Z=26$ dientes, siendo pues $k=40$. Para pasar de un diente a otro, ¿cuál es el número de vueltas enteras y la fracción de vuelta (en el plato apropiado), $d$, que deberemos dar con la manivela del mecanismo divisor?.

[Créditos de esta imagen]

           número de agujeros equiespaciados
plato A        15  16  17  18  19  20
plato B        21  23  27  29  31  33
plato C        37  39  41  43  47  49

De acuerdo con lo explicado en el enunciado, y en buena lógica, tenemos que calcular $d_Z:=\dfrac{40}{Z}$. Entonces, $d_{26}=\dfrac{40}{26}=1+\dfrac{14}{26}=1+\dfrac{7}{13}=1+\dfrac{21}{39}$. Para ocuparnos de la fracción de vuelta podemos colocar el plato $C$, de tal manera que, daremos $1$ vuelta completa al husillo más una fracción de vuelta que corresponde a desplazar $21$ agujeros del círculo que consta de un total de $39$ agujeritos.

Observación importante: Notemos que de querer hacer las divisiones con un simple indicador goniométrico, incluso con el correspondiente nonio, la precisión que éste puede proporcionar es insuficiente, en efecto, el ángulo central entre diente y diente para un engranaje como el supuesto, de $26$ dientes, es igual a $\dfrac{360^\circ}{26}=13^\circ\,50'\,46,15^{''}$: el error que se iría acumulando entre división y división sería excesivo, y el tallaje saldría mal.

En la siguiente imagen se muestra la máquina herramienta fresadora universal:

[Créditos de la imagen: Tecnomaquinaria]

División diferencial: Para fresar $Z$ dientes, en el caso de no encontrar una combinación válida entre el conjunto de platos con sus correspondientes círculos de agujeros, deberíamos recurrir a añadir un tren de engranajes para realizar lo que se conoce como división diferencial. El plato divisor que se utiliza para ello se denomina plato divisor universal, cuya diferencia con el plato divisor sencillo es el añadido de un tren de engranajes entre los ejes paralelos de la manivela y el de la plataforma de giro de la pieza a mecanizar. La siguiente figura lo muestra:

Créditos de la imagen: Monografías

Los pasos a seguir son los siguientes:
  1. Escogemos un número de dientes que se aproxime lo más posible al número de dientes que queremos fresar y con el que sea posible realizar la división indirecta con alguno de los platos intercambiables que tenemos, tal y como se ha visto en el ejemplo de arriba; dicho número de dientes $Z'$ puede ser por defecto o por exceso. Esto nos dará como resultad $d_{Z'}$, que corregiremos añadiendo el tren de engranajes de la lira del plato divisor universal para conectar el eje de la manivela con el eje de la plataforma, de manera que al accionar la manivela se produzca un giro corrector simultáneo.
  2. Calculemos por tanto la correspondiente corrección $d_{dif}:=k\cdot \dfrac{Z'-Z}{Z}$
  3. Buscamos una las ruedas de la lira que permitan montar el tren de engranjes necesario para que $d_{dif}$ sea igual a $\dfrac{R_{i}\times R_{d}}{R'_{i}\times R'_{d}}$, donde se indica con prima las ruedas conducidas, y sin notación prima las ruedas conductoras, y donde los subíndices $i$ y $d$ indican las ruedas que van montadas alineadas a la izquierda y, respectivamente, a la derecha, tal como se muestra en el siguiente esquema del montaje de la lira

Usualmente, se dispone de de un conjunto de ruedas dentadas para esa finalidad (para montar la correspondiente lira), con números de dientes: $\{24,24,28,32,40,48,56,64,72,86,100\}$, con los cuales se debe conectar los dos ejes paralelos de que consta el cabezal divisor con un grupo de, habitualmente, $4$ ruedas, $R_i,R_d,R'_i,R'_d$, más una posible quinta rueda $R''$ intercalada y que gira libremente entre $R_d$ y $R'_d$, al objeto de cambiar el sentido de giro de un eje con respecto a otro, si fuese necesario; el eje que mueve la manivela es el eje conductor, y el eje que mueve la plataforma de sujección de la pieza para el mecanizado de la misma es el eje conducido, de tal manera que se configure $\dfrac{R_{i}\times R_{d}}{R'_{i}\times R'_{d}}$:

Ejemplo de división diferencial: Queremos fresar un engranaje de $Z=53$ dientes, con un plato divisor universal de $k=40$, con el conjunto de platos intercambiables del ejemplo anterior y el conjunto de ruedas que hemos comentado para montar la lira.

Sigamos los pasos indicados:

  1. Calculamos $d_{53}=\dfrac{40}{53}$ y nos damos cuenta de que no encontramos una combinación válidas con los platos intercambiables, así que tomamos $Z'=50$ para la cual sí encontramos dicha combinación: $d_{50}=\dfrac{40}{50}=\dfrac{12}{15}$, esto es, deberemos dar giros de $12$ agujeros tomando el círculo de $15$ agujeros en total del plato A.
  2. Ahora calculamos la corrección diferencial: $d_{dif}=40\cdot \dfrac{50-53}{50}=-\dfrac{12}{5}$
  3. Finalmente, buscamos una combinación equivalente entre las ruedas disponibles para montar la lira, que permita aplicar la corrección diferencial: $d_{dif}=-\dfrac{12}{5}=-\dfrac{4 \times 3}{5 \times 1}=-\dfrac{32 \times 72}{40 \times 24}$, en consecuencia vemos que $R_i=32$, $R'_i=40$, $R_d=72$ y $R'_d=24$. Además al ser $d_{dif}\lt 0$, necesitaremos una rueda más, que girando libremente, iguale el sentido de giro entre $R_2$ y $R'_2$; a esta rueda, que denotamos por $R''$, le asignamos un número de dientes arbitrario (entre el conjunto disponible), pues ese parámetro no afecta en absoluto el resultado, por ejemplo podemos escoger la de $28$ dientes.

$\diamond$

sábado, 24 de febrero de 2024

Encendido de un LED al accionar un pulsador (con resistencia pull-down o normalmente abierto)

/* Encendido de un LED al accionar un pulsador
Utilizo Aduino UNO y el 'shield' Basic I/O
El pulsador 4, en el BasicIO, está conectado
con una resistencia pull-down (normalmente abierto), de manera que
al pulsarlo (se cierra el circuito), el valor de estado del LED se pone
en 1 (HIGH), se cierra el circuito y se enciende 
el LED amarillo; y, al sotarlo (se abre el circuito), 
el valor del estado del LED se pone en 0 (LOW) 
y se apaga el LED. 

Joan Aranès Clua
24/02/2024
*/                  

//Declaración de variables y asignación de valores GPIO
//--------------------------------------------------------------------
//Variable para representar el estado del pulsador
// 1: cierra el circuito; 0: abre el circuito
int Valor;                    

int Pulsador = 4;                //Entrada(digital) del pulsador: D4
int Led_amarillo = 10;           //Salida (digital) del led blanco: D10
//--------------------------------------------------------------------
                    
//Configuración del 'sketch'      
//--------------------------------------------------------------------
void setup() 
{
  pinMode(Pulsador, INPUT);      //La patilla del pulsador se configura como entrada
  pinMode(Led_amarillo, OUTPUT);   //La patilla del led se configura como salida
}
//--------------------------------------------------------------------

//Acciones del 'sketch'
//--------------------------------------------------------------------
void loop() 
{
  Valor=digitalRead(Pulsador);       //Lee el estado, según se pulse 
                                     //o se suelte el pulsador
  digitalWrite(Led_amarillo,Valor);  //Pone el LED en el estado actual
}
Shield Basic I/O montado sobre un Arduino UNO

$\diamond$

Encendido y apagado de los leds rojo, amarillo, verde y blanco del 'shield' Basic I/O

//------------------------------------------------------------------
// Encendido y apagado de los leds rojo, amarillo, verde y blanco 
// del shield Basic I/O 
// Ulitilizo la placa Arduino UNO
// Se encienden y apagan secuencialmente, en el orden:
// rojo -> amarillo -> verde -> blanco
// Joan Aranès Clua
// 22/02/2024
//------------------------------------------------------------------
int led_rojo=11; 
int led_amarillo=10; 
int led_verde=9; 
int led_blanco=6; 
int retardo=100; //valor del retardo (delay) en milisegundos

void setup() {
  pinMode(led_rojo,OUTPUT);
  pinMode(led_amarillo,OUTPUT);
  pinMode(led_verde,OUTPUT);
  pinMode(led_blanco,OUTPUT);

}

void loop() {
  digitalWrite(led_rojo,HIGH);
  delay(retardo);  // put your main code here, to run repeatedly:
  digitalWrite(led_rojo,LOW);
  delay(retardo);
  digitalWrite(led_amarillo,HIGH);
  delay(retardo);  // put your main code here, to run repeatedly:
  digitalWrite(led_amarillo,LOW);
  delay(retardo);
  digitalWrite(led_verde,HIGH);
  delay(retardo);  // put your main code here, to run repeatedly:
  digitalWrite(led_verde,LOW);
  delay(retardo);
  digitalWrite(led_blanco,HIGH);
  delay(retardo);  // put your main code here, to run repeatedly:
  digitalWrite(led_blanco,LOW);
  delay(retardo);
}

Uso del puerto serie y del teclado del ordenador para cambiar el valor del temporizador de retardo en el encendido y apagado de un LED

//------------------------------------------------------------------
// Uso del puerto serie y del teclado del ordenador
// para cambiar el valor del temporizador de retardo 
// ---
// Utilizo la placa Arduino UNO y el shield Basic I/O
// --- 
// Se encienden y apaga el led amarillo
// con duración controlable del parpadeo 
// entre lenta y rápida
// la cual se puede cambiar durante la ejecución del sketchr
// ---
// Joan Aranès Clua
// 23/02/2024
//------------------------------------------------------------------

int led_amarillo=10;//Éste es el LED que utilizaré para hacer la práctica 
int retardo=0;//inicialización a cero del valor del retardo
char caracter_de_control; 

void setup() {
  pinMode(led_amarillo,OUTPUT);
  Serial.begin(9600);  
}

void loop() {
  Serial.println("El led amarillo está encendido"); 
  if (Serial.available()>0){
    caracter_de_control=Serial.read(); //lectura del carácter de control
  }
 if (caracter_de_control=='r'){
   retardo=200; // intervalo de tiempo entre el encendido y el apagado de 0,2 s
   //información de salida por el puerto serie hacia el ordenador:
   Serial.print("parpadeo rápido:"); 
   Serial.println(retardo);
 }
if (caracter_de_control=='l'){
   retardo=1000; // intervalo de tiempo entre el encendido y el apagado de 1 s
   //información de salida por el puerto serie hacia el ordenador:
   Serial.print("parpadeo lento:"); 
   Serial.println(retardo);
 }
  //Encendido 
  digitalWrite(led_amarillo,HIGH);
  delay(retardo);
  //Apagado  
  digitalWrite(led_amarillo,LOW);
  delay(retardo);  
 }

martes, 6 de junio de 2023

Multímetros de bajo coste que permiten medir la mayor parte de las magnitudes eléctricas con la suficiente fiabilidad y precisión

El multímetro que uso en mi taller, junio de 2023
El multímetro que uso en mi velero, para comprobar el estado de las baterías y para realizar reparaciones que pueden surgir a bordo, junio de 2023

jueves, 9 de marzo de 2023

Carga y descarga de un condensador. Una práctica con Arduino Uno

He realizado el montaje del circuito, poniendo el condensador en paralelo con la resistencia, probando distintos valores de capacidad del condensador, C, y de la resistencia, R.

Dispongo de un Arduino Uno y una protoboard así como muchos y variado componentes ( condensadores, resistores, etcétera ) por lo que espero poder seguir el curso con dicho material. Después de muchas pruebas, al final, he podido apreciar claramente la carga y la descarga con los valores que figuran en el sketch que he elaborado ( R=220 ohmios y C=470 microfaradios ) para apreciar las variaciones con la suficiente claridad. En las lecturas del puerto serie he podido ver como se pasaba de 3 V en la carga ( incompleta ) a 1 V en la descarga ( incompleta ). Con otros valores y con el sketch original fluctuaban los valores demasiado rápido y no podía apreciar suficientemente bien la carga y la descarga. Los retardos que he programado, acordes con la constante de tiempo son de 100 ms ( T=RC = 103 ms ). Desde luego para valores del condensador de 1 pF y 1 kilo ohmio de resistencia los tiempos de carga y descarga son demasiado pequeños para poder apreciarlos y distinguirlos (1000 microsegundos).

/*

Programa que he escrito para mi Arduino Uno, para poder leer (desde el mismo IDE de Arduino, por el puerto serie) los valores durante la carga y la descarga del condensador (haz clic en la imagen para ver su tamaño natural y leer mejor):

Con Fritzing he también he cargado este código. Todo ha funcionado bien, obteniendo el diseño esquemático y el diseño en PCB (que no muestro aquí). $\diamond$

Detector de presencia con Arduino Uno y un sensor PIR

Esquema del montaje (Fritzing):

Programa que he escrito para Arduino Uno (haz clic para ver el tamaño natural de la imagen):

$\diamond$

Dispositivo de asistencia al aparcamiento, empleando el microcontrolador Arduino Uno, un sensor de ultrasonidos, un LED rojo (alarma luminosa), un zumbador (alarma acústica) y un display (para leer la distancia medida)

$\diamond$

Medida de una distancia con ultrasonidos, empleando mi Raspberry Pi 3B+ y el sensor de ultrasonidos HC-SR04

He montado el sensor de ultrasonidos HC-SR04 en la tableta de prototipos y ésta la he conectado a una Raspeberry Pi 3 B+ mediante un enlace Pi T-Cobber Plus para Raspberry Pi de Adafruit para facilitar el uso de los pines GPIO

Para adecuar la salida el eco de la HC-SR04 ( de 5 V ) a la placa Raspeberry he utilizado un divisor de tensión con dos resistencias: una de 2 kΩ – dos de 1kΩ en serie - ( conectada a GND y a la salida del eco) y otra de 1 kΩ ( conectada a la salida del eco ) y al pin GPIO #23 de la Raspberry. Así, se obtiene la tensión adecuada de 3,3 V para la entrada a la Raspberry: $$\dfrac{5}{(1+2)\cdot 10^3}\cdot 2\cdot 10^3 =\dfrac{10}{3} \approx 3.3\,\text{V}$$ Por otra parte, he conectado el Trigger del sensor al pin GPIO #18 de la Raspeberry. La alimentación del sensor se realiza conectando la entrada de 5 V, que he conectado al pin homónimo de la Raspberry, y GND del sensor con GND de la Raspberry.

Este es el programa (haz clic en la imagen para verla en tamño natural), con el código fuente en Python (que guardo en el archivo midedistancias.py), para poder gestionar el medidor de distancias:

Nota: En las anteriores prácticas, ya importé e instalé la librería GPIO (necesaria para las prácticas de electrónica ) tal como se indica en el material de estudio. Recuerdo que lo hice de la siguiente manera:

  1. Descarga de la librería:
    $ wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz
      import RPi.GPIO

  2. Descompresión de la librería descargada:
    $ tar zxf RPi.GPIO-0.5.11.tar.gz

  3. … des del directorio:
    $ cd RPi.GPIO-0.5.11

  4. Y, finalmente, se instala la librería en el sistema, haciendo:
    $ cd ..
    $ sudo python setup.py install

y ésta es una captura de pantalla desde el shell de Raspbian (haz clic en la imagen para verla en tamño natural):

Des del directorio en el que he guardado los ejercicios ejecuto el intérprete de Python para poner en marcha el script:

        $ sudo python midedistancias.py
  

Además, en este vídeo ( grabado con mi smartphone ) intento dar una visión de conjunto de la forma en que he procedido para la realización de las medidas de distancia. Y, debajo, dejo un volcado de pantalla del cómo pongo en marcha el medidor:

$\diamond$

Encendido y apagado intermitente de un LED empleando una Raspberry Pi 3B+ y un programa escrito en Python, que hace uso de la (imprescindible) librería GPIO

Vídeo de la práctica:

https://www.dropbox.com/s/mtwd11x1a5ohkim/20201224_130210.mp4?dl=0

Volcado de pantalla del escritorio de Raspbian con el IDE Thonny para compilar y ejecutar el programa que he escrito en Python:

Descarga de la librería GPIO:

  $ wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz
import RPi.GPIO

Descompresión de la librería descargada:
$ tar zxf RPi.GPIO-0.5.11.tar.gz

Nos colocamos en el directorio:
$ cd RPi.GPIO-0.5.11

Instalo la librería en el sistema
$ cd ..
$ sudo python setup.py install

Código fuente en Python del programa de encendido-apagado intermitente:

He colocado las instrucciones de encender, apagar y esperar en un bucle infinito de tipo while … do https://www.dropbox.com/s/l49v8yyjnj794os/enciendeyapaga.py?dl=0 Nota: Como paso previo, he importado y he instalado las librerías necesarias, tal como se indica en el material de estudio

$\diamond$

Un ejercicio (sencillo) de diseño 3D con el archivo STL para poder imprimirlo

El diseño lo he comportido públicamente en el sitio web de Tinkercad, con el siguiente URL: https://www.tinkercad.com/things/hRJrehXQkS5

El archivo STL final

Finalmente, he obtenido el archivo STL para una ulterior impresión en 3D. He subido dicho archivo a una nube de tados para facilitar el envío de la tarea, y puede descargarse a través de este enlace.

$\diamond$

Ejercicio de impresión 3D mejorada (mediante el servidor de impresión OctoPrint y la cámara V2)

Los siguientes enlaces permiten acceder a los archivos de vídeo los cuales, para no agrandar la memoria del envío, los he ubicado en mi nube de datos:

[1|2|3|4|5|6|7|8|9|10|11|12|13|14|15]

$\diamond$

Instalación de una cámara V2 en mi Raspberry Pi 3B+ e instalación del servidor de impresión 3D OctoPrint

Algunos vídeos de la impresión de prueba, mostrando los datos del serividor de impresión:

$\diamond$

Tareas de mantenimiento básico de mi impresora 3D (Ender 3 pro)

$\diamond$

Varias pruebas con mi impresora 3D (Ender3 pro)

$\diamond$

¿Con 350 W basta?

Mi pequeño taladro de columna que tengo puesto encima de un banco