Измерение массы Земли с Arduino: пошаговое руководство по DIY
Компоненты и расходники
| Arduino UNO | ×1 |
| USB-кабель (Type A — Type B) | ×1 |
| Резистор 560 Ом | ×4 |
| Резистор 100 Ом | ×2 |
| Пьезоэлектрический датчик | ×4 |
| ИК-передатчик (общего назначения) | ×1 |
| ИК-приёмник (фотодиод, общего назначения) | ×1 |
| Потенциометр (общего назначения) | ×1 |
| Операционный усилитель UA741C | ×1 |
| Макетная плата (breadboard) | ×1 |
| Провода длиной 1,2 м | ×3 |
| Печатная плата общего назначения (5×5 см) | ×1 |
| Скотч | ×1 |
| Лист картона | ×1 |
Программное обеспечение и онлайн-сервисы
- Arduino IDE
О проекте
Введение
Однажды, взвешиваясь на весах, я подумал: «Какова масса Земли? И как её вообще можно измерить? Весов, на которых можно поставить планету, не существует. Значит, должен быть косвенный метод». Здесь я представлю реализацию одного такого метода.
Шаг 1: Косвенный метод
В начале XIX века учёные использовали второй закон Ньютона (F = ma) и закон всемирного тяготения (F = G·m·M / r²), где m — масса тела, a — ускорение, G — гравитационная постоянная, M — масса Земли, r — её радиус. Подставляя ускорение свободного падения g вместо a и объединяя уравнения, получаем:
m·g = G·m·M / r²
Отсюда масса Земли:
M = (g·r²) / G
Предполагаем, что G и r известны. Остаётся экспериментально определить g с помощью Arduino и датчиков, а затем вычислить M.
Шаг 2: Обзор эксперимента
(немного математики — Arduino подключится скоро)
Для определения g используем свободное падение — движение тела только под действием гравитации. Ключевые параметры:
- Начальная скорость — скорость в начале падения (примем 0 м/с).
- Конечная скорость — скорость в конце измеряемого участка.
- Пройденное расстояние — высота падения (фиксируем 1 м).
- Время полёта — время падения на это расстояние.
- Ускорение — изменение скорости в единицу времени (равно
g).
Уравнение Ньютона:
S = v₀·t + (a·t²)/2
Знаем три переменные: S = 1 м, v₀ = 0, измерим t с помощью Arduino. Тогда:
1 = (g·t²)/2 → g = 2 / t²
Arduino зафиксирует момент начала падения (ИК-барьер) и момент удара (пьезодатчики), их разница и есть t.
Шаг 3: Необходимые детали
Список приведён в таблице выше. Дополнительно: паяльник, клей-пистолет, отвёртка, мультиметр.
Шаг 4: Схема 1 — ИК-цепочка (старт отсчёта)
- ИК-светодиод в прямом включении освещает фотодиод.
- Фотодиод в обратном включении; сигнал с его катода через резистор идёт на вход оптрона.
- Второй вход оптрона — пороговое напряжение от потенциометра.
- Выход оптрона подключён к Arduino (pin 4).
Когда падающий предмет перекрывает луч — фиксируется время старта.
Шаг 5: Схема 2 — Пьезоэлектрическая цепочка (конец отсчёта)
- 4 пьезодатчика подключены параллельно, каждый с резистором 560 Ом для ограничения пиков напряжения.
- Общий «плюс» — на аналоговые входы Arduino (A0–A3), «минус» — на землю.
Удар о посадку генерирует импульс — фиксируется время окончания.
Шаг 6: Сборка установки
- Из картона делаем «навес» и крепим на стене на высоте ~1,1 м.
- ИК-модуль смотрит вниз.
- Выход оптрона — на pin 4 Arduino (провод 1,2 м), питание ИК-модуля — от Arduino (два других провода 1,2 м).
- Пьезопанель на полу точно под ИК-модулем. Всё надёжно закрепляем.
Шаг 7: Процедура эксперимента
- На верхушку падающего предмета клеим тонкий выступ (шпильку).
- Держим предмет на отметке 1 м так, чтобы выступ перекрывал ИК-луч.
- Отпускаем без начального толчка.
- В момент отпускания луч восстанавливается — Arduino запоминает
startTime. - При ударе о пьезопанель генерируется пик — Arduino запоминает
endTime. timeOfFlight = endTime - startTime.
Шаг 8: Код для Arduino
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;
}
}
}
Шаг 9: Проведение эксперимента
- Настройте порог срабатывания пьезодатчиков в коде.
- Пьезопанель должна находиться строго под ИК-модулем.
- Бросайте предмет с высоты ровно 1 м, не сообщая ему начальной скорости.
Шаг 10: Результаты и масса Земли
Три замер времени полёта: 443 мс, 443 мс, 464 мс. Среднее: 450 мс.
Подставляем в формулу:
g = 2 / (0,45)² ≈ 9,8755 м/с²
Масса Земли:
M = (g·r²)/G ≈ 6,0066 × 10²⁴ кг
Справочное значение: 5,972 × 10²⁴ кг. Результат очень близок к реальности!
Производственный процесс
- Измерение качества воздуха с OpenSensors: руководство по Arduino и Python
- Управление яркостью LED с ШИМ через кнопку на Arduino Mega
- Создание ультразвукового левитатора на Arduino: пошаговое руководство
- Точное измерение частоты и коэффициента заполнения на Arduino UNO
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Измерение расстояния в реальном времени: Ардуино-сонар с визуализацией в Processing
- Умный счетчик парковки: Отслеживание машин в реальном времени (Arduino, Processing, PHP)
- Подключение датчика пульса MAX30100 к Arduino: Пошаговое руководство
- Пошаговое руководство: подключение датчика влаги почвы YL-39/YL-69 к Arduino UNO
- Оценка цифровой зрелости компании: проверенная методика