Все статьиHardware

Система мониторинга молний на Arduino

БА
Бексултан Айтен
CTO, Alashed
15 июня 2025 г.
9 мин чтения
Система мониторинга молний на Arduino

Строим систему круглосуточного мониторинга грозовой активности на Arduino Nano с антенным датчиком, усилителем сигнала и записью данных на компьютер.

Как Arduino может засечь молнию

Каждый грозовой разряд создаёт мощный электромагнитный импульс, который распространяется на сотни километров. Этот импульс можно уловить простой антенной и усилить до уровня, который Arduino способен измерить. Именно на этом принципе построены профессиональные системы обнаружения молний, и мы соберём упрощённый аналог, способный работать круглосуточно и записывать данные на компьютер.

Проект объединяет физику электромагнитных волн, аналоговую электронику (усиление слабого сигнала) и цифровую обработку данных. Ученики увидят на экране реальные всплески от грозовых разрядов -- это производит сильное впечатление.

Целевая аудитория: ученики 8-11 классов.

Время на проект: 2-3 занятия по 45 минут.

Необходимые компоненты

  • Arduino Nano
  • Модуль усилителя слабых сигналов (коэффициент усиления до 10000, стоимость менее 1 доллара)
  • Антенна-детектор (медный провод длиной 15-20 см, катушка индуктивности или готовый модуль датчика молний)
  • Макетная плата
  • Провода-перемычки
  • USB-кабель
  • Компьютер с установленным ПО AmaSeis (бесплатное, для записи данных)

Принцип работы

Молния генерирует электромагнитный импульс в широком диапазоне частот. Антенна улавливает этот импульс как слабое напряжение, модуль усилителя увеличивает его в тысячи раз, а Arduino Nano оцифровывает аналоговый сигнал и передаёт данные на компьютер через USB. На компьютере программа AmaSeis рисует непрерывную сейсмограмму (точнее, «электрограмму»), показывая активность за последние 24 часа.

Система работает по принципу NerdaqII -- прошивки для Arduino, которая превращает плату в 16-битный АЦП с частотой около 18.78 измерений в секунду. Данные передаются в программу AmaSeis, которая изначально создавалась для записи сейсмических данных, но отлично подходит для любых аналоговых сигналов.

Детектор молний: антенна и модуль усилителя
Детектор молний: антенна и модуль усилителя

Схема подключения

Антенна -> Усилитель:

  • Выход антенны (или катушки индуктивности) подключается ко входу модуля усилителя
  • Питание усилителя: VCC -> 5V Arduino, GND -> GND Arduino

Усилитель -> Arduino Nano:

  • Выход усилителя -> аналоговый пин A0 на Arduino Nano
  • Усилитель и Arduino должны иметь общую землю (GND)

Антенну расположите как можно дальше от компьютера и силовых кабелей. Даже простой провод длиной 20 см, подключённый ко входу усилителя, способен уловить близкие разряды. Для лучших результатов используйте катушку из 50-100 витков медного провода на ферритовом стержне.

Принципиальная схема системы мониторинга молний на Arduino
Принципиальная схема системы мониторинга молний на Arduino

Полный код прошивки

Основа проекта -- прошивка NerdaqII, которая превращает Arduino в устройство записи аналоговых данных. Ниже -- упрощённая версия, совместимая с AmaSeis.

```cpp

// Система мониторинга молний на Arduino Nano

// Считывает аналоговый сигнал и передаёт по Serial

// Совместимо с программой AmaSeis

#define SENSOR_PIN A0 // Пин аналогового входа

#define SAMPLE_RATE 19 // Частота выборки (Гц)

#define BUFFER_SIZE 64 // Размер буфера усреднения

// Переменные для передискретизации (oversampling)

long sampleSum = 0;

int sampleCount = 0;

unsigned long lastSample = 0;

unsigned long sampleInterval = 1000 / SAMPLE_RATE;

// Калибровка нулевого уровня

long zeroLevel = 512; // Среднее значение АЦП (10 бит)

void setup() {

// Скорость порта должна совпадать с настройками AmaSeis

Serial.begin(9600);

// Настраиваем АЦП для максимальной точности

analogReference(DEFAULT);

// Калибровка: определяем нулевой уровень в покое

Serial.println("Калибровка...");

long total = 0;

for (int i = 0; i < 500; i++) {

total += analogRead(SENSOR_PIN);

delay(2);

}

zeroLevel = total / 500;

Serial.print("Нулевой уровень: ");

Serial.println(zeroLevel);

Serial.println("Мониторинг запущен");

Serial.println("---");

}

void loop() {

// Непрерывное считывание с усреднением

int raw = analogRead(SENSOR_PIN);

sampleSum += raw;

sampleCount++;

unsigned long now = millis();

// Отправляем данные с заданной частотой

if (now - lastSample >= sampleInterval) {

lastSample = now;

// Среднее значение из накопленных выборок

int averaged = sampleSum / sampleCount;

sampleSum = 0;

sampleCount = 0;

// Масштабируем в 16-битный диапазон для AmaSeis

// Центр: 32768, диапазон: 0-65535

long value16bit = map(averaged, 0, 1023, 0, 65535);

// Вычисляем отклонение от нулевого уровня

long deviation = averaged - zeroLevel;

// Формат вывода для AmaSeis: одно число на строку

Serial.println(value16bit);

// Детектирование сильных импульсов (возможные молнии)

if (abs(deviation) > 50) {

// Помечаем в отладочном выводе

// (AmaSeis игнорирует строки, начинающиеся с #)

Serial.print("# ИМПУЛЬС: отклонение=");

Serial.print(deviation);

Serial.print(" сырое=");

Serial.println(averaged);

}

}

}

`

Для полноценной работы с AmaSeis скачайте оригинальную прошивку NerdaqII с сайта проекта -- она обеспечивает точную синхронизацию и формат данных, ожидаемый программой.

Настройка программы AmaSeis

AmaSeis -- бесплатная программа для непрерывной записи аналоговых данных. После установки:

1. Укажите COM-порт, к которому подключена Arduino (меню Settings -> Device)

2. Выберите устройство SETUPK1 с нулевым уровнем 32768

3. Настройте фильтры: низкочастотный и высокочастотный для подавления помех

4. Установите усиление (Gain) около 300 -- подберите экспериментально

5. Длительность строки гелиокордера: 1 час (на экране уместятся 24 часа)

После запуска программа начнёт рисовать непрерывную ленту данных. Спокойный фон будет ровной линией, а грозовые разряды -- резкими всплесками.

Разбор ключевых элементов

Передискретизация (oversampling). Arduino считывает АЦП сотни раз в секунду, но передаёт только 19 значений. Усреднение множества быстрых замеров повышает эффективную разрядность: из 10-битного АЦП получается 12-14 бит полезного разрешения. Это критически важно для обнаружения слабых сигналов на фоне шума.

Калибровка нулевого уровня. При включении система в течение секунды считывает сигнал «в покое» и запоминает среднее значение. Все дальнейшие измерения сравниваются с этим уровнем. Без калибровки дрейф нуля маскировал бы слабые импульсы.

Усиление. Модуль усилителя слабых сигналов -- ключевой элемент. Электромагнитный импульс от молнии на расстоянии 50 км создаёт на антенне напряжение в микровольты. Без усиления в 1000-10000 раз Arduino просто не увидит его на фоне собственного шума АЦП.

Советы для занятий

  • Проверьте работу системы без грозы: прикоснитесь к антенне пальцем -- на графике появится всплеск от наводок тела. Это подтверждает, что схема работает
  • Зажигалка с пьезоэлектрическим поджигом генерирует искру, которую система отлично ловит -- используйте её для демонстрации
  • Обсудите с учениками, почему молния создаёт электромагнитный импульс (резкое изменение тока в канале молнии)
  • Предложите вести журнал наблюдений: дата, время, количество зафиксированных импульсов, погодные условия
  • Для продвинутых учеников: добавьте запись на SD-карту и модуль часов реального времени DS3231 для автономной работы без компьютера

Как Alashed помогает

Платформа Alashed Hardware предлагает готовые наборы с модулями усилителей и антеннами, совместимыми с Arduino Nano. В Alashed CodeStudio можно визуализировать аналоговый сигнал в реальном времени прямо в браузере, что упрощает отладку и делает проект доступным даже без установки AmaSeis на школьные компьютеры.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо