Mide la masa de la Tierra con Arduino: Guía paso a paso DIY
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| Cable USB-A a B | 1 |
| Resistencia de 560 ohmios | 4 |
| Resistencia de 100 ohmios | 2 |
| Sensor piezoeléctrico | 4 |
| Emisor IR (genérico) | 1 |
| Receptor IR (genérico) | 1 |
| Potenciómetro rotativo (genérico) | 1 |
| Amplificador operacional UA741C | 1 |
| Protoboard (genérica) | 1 |
| Cables de 1.2 metros | 1 |
| PCB de propósito general | 1 |
| Cinta adhesiva | 1 |
| Cartón | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Introducción
Un día me estaba pesando en una báscula y de repente me pregunté: "¿Cuál sería la masa de la Tierra?" Y lo más importante: "¿Cómo podemos medirla?" No existe una báscula lo suficientemente grande para colocar la Tierra. Debe haber alguna forma indirecta de medir su masa. Aquí presento la implementación de uno de esos métodos indirectos.
Paso 1: El método indirecto
A principios del siglo XIX, los científicos utilizaron la segunda ley de Newton y la ley de la gravitación universal para medir la masa de la Tierra. Estas ecuaciones son F = ma y F = (GmM)/r² respectivamente (m = masa del objeto, a = aceleración, G = constante gravitacional, M = masa de la Tierra, r = radio de la Tierra). Si sustituimos g (aceleración debida a la gravedad) por la 'a' y combinamos ambas ecuaciones, obtenemos:
mg = GmM/r²
Despejando M (masa de la Tierra):
M = (g·r²)/G
Asumiremos que conocemos los valores de G y r. Encontraremos g mediante un pequeño experimento con Arduino y algunos sensores. Finalmente, combinaremos todo para calcular M.
Paso 2: Visión general del experimento
(Ten paciencia con un poco de matemáticas, Arduino entrará en acción pronto)
Para determinar la aceleración de la gravedad necesitamos entender la "caída libre": un movimiento en el que un cuerpo se desplaza hacia la Tierra bajo la única acción de la gravedad. Los términos que caracterizan esta caída son:
- Velocidad inicial: velocidad al inicio de la caída.
- Velocidad final: velocidad al final de la caída.
- Distancia recorrida: distancia cubierta durante la caída.
- Tiempo de vuelo: tiempo para cubrir esa distancia.
- Aceleración: tasa de cambio de velocidad; en caída libre equivale a g.
Una de las ecuaciones de Newton establece:
Distancia = (velocidad_inicial × tiempo) + (aceleración × tiempo²)/2
Hay 4 variables, incluyendo la aceleración (g). Si conocemos 3, podemos calcular la 4ª. Fijamos dos:
- Distancia = 1 metro (soltaremos el objeto desde 1 m de altura).
- Velocidad inicial = 0 m/s (partimos del reposo).
Quedan dos incógnitas: tiempo de vuelo y g. Aquí es donde Arduino nos ayuda a medir el tiempo de vuelo con dos marcas temporales: inicio y fin de la caída.
Sustituyendo los valores fijos:
1 = (g × tiempo²)/2 → g = 2 / tiempo²
Paso 3: Materiales necesarios
- Cualquier placa Arduino (preferiblemente UNO/Duemilanove).
- Cable USB para conectar Arduino al PC.
- Resistencias de 560 Ω (4 uds) y 100 Ω (2 uds).
- Sensores piezoeléctricos (4 uds).
- Par emisor/receptor IR (LED IR + fotodiodo).
- Potenciómetro.
- Amplificador operacional (UA741C).
- Protoboard.
- Tres cables de 1.2 m.
- PCB pequeña (5×5 cm) para el circuito IR.
- Cinta adhesiva y cartón.
Paso 4: Esquemático 1 - Circuito IR
Este circuito marca el instante inicial de la caída libre. Puntos clave:
- LED IR en polarización directa (ilumina el fotodiodo).
- Fotodiodo en polarización inversa.
- Salida del cátodo + resistencia conectada a una entrada del amplificador operacional.
- Otra entrada del opamp conectada al potenciómetro (voltaje de umbral).
- Salida del opamp → pin digital de Arduino.
Paso 5: Esquemático 2 - Circuito piezoeléctrico
Este circuito marca el instante final de la caída. Puntos clave:
- 4 sensores piezoeléctricos conectados en paralelo.
- 4 resistencias de 560 Ω en paralelo con cada sensor para limitar picos de voltaje.
- Terminal negativo a tierra; terminal positivo a entradas analógicas de Arduino.
Paso 6: Montaje completo
- Construye una estructura de cartón tipo techo y fíjala a la pared a ~1.1 m de altura.
- Coloca el módulo IR mirando hacia abajo en el "techo".
- Conecta la salida del opamp al pin 4 de Arduino con cable de 1.2 m.
- Alimenta el módulo IR (Vcc y GND) desde Arduino con los otros dos cables.
- Fija firmemente: cables a la pared, módulo IR al cartón, panel piezoeléctrico en el suelo justo debajo del IR.
Paso 7: Detalles del experimento
- Pega una pequeña protuberancia fina en la parte superior del objeto que caerá.
- Sujeta el objeto a la marca de 1 m de modo que la protuberancia interrumpa el haz IR.
- Suelta el objeto sin impartir fuerza (caída libre) hacia la zona de aterrizaje piezoeléctrica.
- Al caer, el haz IR queda libre → señal de inicio.
- Al impactar, los sensores piezoeléctricos generan pico de voltaje controlado → señal de fin.
- Restando fin - inicio obtenemos el tiempo de vuelo para calcular g.
Paso 8: Código Arduino
El código es sencillo. Se explica en detalle en el video adjunto (minuto 13:35).
Paso 9: Realicemos el experimento
- Ajusta el umbral del sensor piezoeléctrico en el código.
- Coloca el panel piezoeléctrico justo debajo del módulo IR.
- Suelta el objeto desde 1 m sin fuerza externa.
Paso 10: Resultados y masa de la Tierra
Tras 3 repeticiones, tiempos de vuelo obtenidos:
- 443 ms
- 443 ms
- 464 ms
Promedio: 450 ms
Sustituyendo en g = 2 / t² → g ≈ 9.8755 m/s².
Finalmente, M = (g·r²)/G → M ≈ 6.0066 × 10²⁴ kg.
Valor real (Google): 5.972 × 10²⁴ kg. ¡Nos hemos acercado bastante!
Código
const int sensorPin1 = A0;
const int sensorPin2 = A1;
const int sensorPin3 = A2;
const int sensorPin4 = A3;
const int photoPin = 4;
const int ledPin = 13;
const int threshold = 110;
char stringToPrint[100];
int startTime, endTime;
int val1, val2, val3, val4;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPin3, INPUT);
pinMode(sensorPin4, INPUT);
pinMode(photoPin, INPUT);
}
void loop() {
int start = digitalRead(photoPin);
startTime = millis();
if (start == HIGH) digitalWrite(ledPin, HIGH);
while (start == LOW) {
digitalWrite(ledPin, LOW);
val1 = analogRead(sensorPin1);
val2 = analogRead(sensorPin2);
val3 = analogRead(sensorPin3);
val4 = analogRead(sensorPin4);
if ((val1 >= threshold) || (val2 >= threshold) || (val3 >= threshold) || (val4 >= threshold)) {
endTime = millis();
sprintf(stringToPrint, "%d ms", endTime - startTime);
Serial.println(stringToPrint);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
start = HIGH;
}
}
}
Esquemáticos
Esquemáticos Fritzing para circuito IR y circuito piezoeléctrico, además de fotos del hardware montado.
Proceso de manufactura
- Medición de la Calidad del Aire con OpenSensors: Guía para Arduino y Python
- Control de Brillo LED con PWM mediante Pulsador en Arduino Mega
- Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
- Medición precisa de frecuencia y ciclo de trabajo con Arduino UNO
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Medición de Distancia en Tiempo Real con Sonar Arduino y Visualización en Processing
- Contador Inteligente de Plazas de Aparcamiento: Seguimiento en Tiempo Real con Arduino, Processing y PHP
- Integración del Sensor de Pulso MAX30100 con Arduino: Guía Paso a Paso
- Guía Paso a Paso: Conectar Sensor de Humedad de Suelo YL-39/YL-69 a Arduino UNO
- Crea una Interfaz Web en PHP para Controlar tu Arduino Uno
- Evaluando la Madurez Digital de su Empresa: Un Marco Comprobado