Высокопроизводительный регистратор данных для метеозонда на Arduino
Компоненты и расходные материалы
| DS18B20 (цифровой термометр 1-Wire) | 2 шт. |
| DHT22 (датчик температуры и влажности) | 1 шт. |
| ADXL335 (трехосевой акселерометр) | 1 шт. |
| Arduino Mega 2560 | 1 шт. |
| Модуль MicroSD-карты | 1 шт. |
| MicroSD-карта (≤16 ГБ, FAT16/FAT32) | 1 шт. |
| SMD LED 5050 | 1 шт. |
| Резисторы: 4.75 кОм (2), 100 Ом (3), 10 кОм (1) | — |
| Пин-хедеры 36 pin (2 шт.) | — |
Необходимые инструменты
- Паяльник и свинец-свободный припой
Программное обеспечение
- Arduino IDE
О проекте
Вы можете поднять Arduino на высоту ~30 км с помощью метеозонда — это «край космоса», где 99% атмосферы отсутствует. В этом руководстве описаны три пути реализации в зависимости от ваших навыков и целей.
Три пути реализации
Путь 1 — Макетная плата (Proto Board): максимальная гибкость в выборе датчиков, требует базовых навыков пайки.
Путь 2 — Готовый PCB-шилд: чистая компоновка, минимум пайки, фиксированный набор датчиков. Предоставляются Gerber-файлы и код.
Путь 3 — Собственный PCB: полная свобода проектирования, но требует опыта в разработке плат, программировании и пайке.
Важные правила и ограничения (США, FAA)
- Нет сотовых сигналов на борту (телефон только в режиме «в самолете»).
- Для GPS-трекинга через APRS нужна лицензия HAM.
- Если удельный вес полезной нагрузки > 3.0 унц/кв.дюйм — общий вес < 4 фунтов.
- Одна полезная нагрузка < 6 фунтов.
- Две полезные нагрузки — суммарно < 12 фунтов.
Полные правила FAA: ссылка.
Путь 1: Макетная плата
Выбор способа поиска полезной нагрузки
- SPOT GPS: простота, неограниченная дальность, долгая работа от батареи. Минусы: дорого, не работает вверх дном, сигнал блокируется плотными объектами. Рекомендуется SPOT 3 Satellite Messenger.
- APRS-радио: высокая надежность, передача телеметрии и координат, точная высота. Требует лицензии HAM.
- Мобильный телефон: не рекомендуется (проблемы с режимом полёта, стоимость, ненадёжность).
Планирование полёта
- Учтите температуру до −40 °C — выбирайте датчики с соответствующим диапазоном.
- Питание: холод снижает ёмкость батарей — используйте крупный источник питания и теплоизолированный корпус (пенопласт).
- Составьте чек-лист: нужные данные, наличие камеры, весовые ограничения.
Схема и код (Путь 1)
Используется Arduino Mega (для совместимости с кодом). При переходе на Nano — переназначьте SPI-пины модуля SD.

// DHT22
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// SD Card
#include
#include
File sdcard_file;
int CS_pin = 10;
// DS18B20
#include
#include
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int scale = 3; // ±3g для ADXL337
boolean micro_is_5V = true;
void setup() {
Serial.begin(9600);
sensors.begin();
dht.begin();
pinMode(CS_pin, OUTPUT);
if (SD.begin()) {
Serial.println("SD Card found!");
} else {
Serial.println("Error finding SD Card");
return;
}
sdcard_file = SD.open("data.csv", FILE_WRITE);
if (sdcard_file) {
// Заголовок CSV
sdcard_file.println("DS18B20,DHT22 Temp,Hum,H.InX,rawX,rawY,rawZ,scaledX,scaledY,scaledZ");
} else {
Serial.println("error initializing SD card");
}
}
void loop() {
delay(222);
// Акселерометр
int rawX = analogRead(A0);
int rawY = analogRead(A1);
int rawZ = analogRead(A2);
float scaledX, scaledY, scaledZ;
if (micro_is_5V) {
scaledX = mapf(rawX, 0, 675, -scale, scale);
scaledY = mapf(rawY, 0, 675, -scale, scale);
scaledZ = mapf(rawZ, 0, 675, -scale, scale);
} else {
scaledX = mapf(rawX, 0, 1023, -scale, scale);
scaledY = mapf(rawY, 0, 1023, -scale, scale);
scaledZ = mapf(rawZ, 0, 1023, -scale, scale);
}
// DS18B20
sensors.requestTemperatures();
int etemp = sensors.getTempCByIndex(0);
// DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) return;
float hic = dht.computeHeatIndex(t, h, false);
// Запись на SD
sdcard_file.print(etemp); sdcard_file.print(",");
sdcard_file.print(t); sdcard_file.print(",");
sdcard_file.print(h); sdcard_file.print(",");
sdcard_file.print(hic); sdcard_file.print(",");
sdcard_file.print(rawX); sdcard_file.print(",");
sdcard_file.print(rawY); sdcard_file.print(",");
sdcard_file.print(rawZ); sdcard_file.print(",");
sdcard_file.print(scaledX); sdcard_file.print(",");
sdcard_file.print(scaledY); sdcard_file.print(",");
sdcard_file.print(scaledZ); sdcard_file.print(",");
sdcard_file.println(" ");
sdcard_file.close();
delay(223);
}
float mapf(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Важно: SD-карта должна быть отформатирована в FAT16/FAT32, объём ≤16 ГБ. Добавьте светодиоды для индикации состояния. Проверяйте питание SD-модуля — некоторые чувствительны к напряжению.
Путь 2: Готовый PCB-шилд «Eclipse»
Плата включает: 2×DS18B20 (внутренний/внешний), DHT22, ADXL337, MPL3115A2 (барометр), индикацию RGB-светодиодом, слот для MicroSD. Gerber-файлы и код на GitHub: nmrocketryreviews/HADLdatalogger.
Заказ PCB
- Слои и размеры — без изменений
- Одиночная плата, толщина 1.6 мм
- Любой цвет (зелёный быстрее)
- Покрытие HASL (с свинцом) или без свинца
- Медь 1 oz, Flying Probe Test, без castellated holes
- Количество — по желанию (5 шт. от $2)
Сборка и прошивка
- Распаяйте все компоненты согласно руководству (см. фото).
- Установите шилд на Arduino Mega.
- Отформатируйте MicroSD (FAT16/FAT32, ≤16 ГБ).
- Загрузите код версии 1.6 из репозитория.
- Проверьте через Serial Monitor — должно появиться сообщение об успешной инициализации SD.
Код для Пути 2 включает работу с барометром MPL3115A2 и RGB-индикацией (зелёный — SD ОК, красный — ошибка, синий — запись).
Путь 3: Собственный PCB
Руководство не обучает проектированию PCB, а даёт рекомендации:
- Определите задачи: температура (−50 °C), влажность, высота (GPS, барометр не работает >30к фута), качество воздуха, радиация, GPS.
- Выбор способа поиска: SPOT, APRS (нужна лицензия), телефон (не рекомендуется).
- Вес: соблюдайте лимиты FAA.
- Питание: термоизоляция (пенопласт), возможно — солнечные панели или химические подогреватели.
- Проектируйте схему и плату (шилд или автономная), тщательно проверяйте перед полётом.
Заключение
Метеозонды — доступный способ поднять полезную нагрузку в стратосферу. Обязательно: установите радарный рефлектор, подайте NOTAM (уведомление лётчикам), соблюдайте все правила FAA. Не создавайте прецедентов для ужесточения правил.
Удачных полётов!
NM Rocketry Reviews
Печатные файлы и схемы
- STL-гимбал для SPOT-трекера (поддерживает вертикальное положение)
- Схемы для Пути 1 и референсная схема
- GitHub-репозиторий с Gerber-файлами и кодом
Производственный процесс
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Многопозиционная система датчиков температуры для интеграции в умный дом
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- MotionSense: умная система обнаружения проникновения на Arduino и ESP8266
- Пожарная безопасность 3D-принтера: умная система обнаружения дыма
- Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano
- Веб-управляемый IoT-индикатор на Arduino, Yaler и IFTTT
- Магнитная левитация на отталкивании с Arduino: Простая схема и DIY-руководство
- Arduino Flip Clock на матрице 8×8 LED — DIY проект реального времени
- CoroFence: термический детектор на GridEye + PIR с IoT