Недавно прочитал две статьи на Хабре про Explorer — 1 и Explorer — 2. Захотел поделиться подобным проектом.
Предыстория и постановка задачи
Давненько почитываю хаб «Космос» на хабре и каждый раз понимаю, что хочу почувствовать то же самое, что и разработчики Curiosity или Rosetta, столкнуться с такими же трудностями, как они, главная из которых – удаленность. Бюджет у меня поскромнее, так что будем делать на Arduino.
За основу я взял Explorer-1, но хотел отказаться от концепции навешивания датчиков и углубиться в тему удаленного управления.
Итак, что должен делать спутник:
1) Собственно, как любой спутник, он должен уметь принимать и передавать данные;
2) Должен обладать датчиками;
3) Должен быть автономным.
Разработка
Роль наземной станции выполняла Arduino uno, а спутником была Arduino nano.
Спутник запускаем на орбиту (балкон).
Передатчик у меня на микросхеме NRF24L01+. Она обеспечивает двустороннюю связь пакетами по 32 байта.
Выбор датчиков пал на DHT22, BMP180 и BH1750FVI. Как вы поняли это будет метеоспутник.
Все датчики — DHT22 (датчик влажности и температуры), BMP180 (датчик давления и температуры) и BH1750FVI (датчик освещенности) — я купил дома, через Avito. До сих пор не понимаю, почему этим никто не пользуется.
Автономность достигается питанием от батарейки «Крона» (9 вольт). Я пытался сделать питание от солнечной батареи через step up, как тут, но панели не хватало мощности.
Я не стал заморачиваться с качеством кода – все равно делаю на Ардуино. Код сюда приводить не буду, потому что он некрасивый. Каждый, кто захочет сделать что-то подобное, сам найдет все необходимое, благо интернет и так завален кучей примеров для работы с датчиками.
Зато питание я развел особое: с фильтрами и
Не знаю, зачем фильтры при питании от батарейки, но звучит круто.
Управление
Команды я придумывал так, чтобы можно было отлаживать спутник, как если бы он был прямо у меня на столе, а не на балконе (открытом).
Команды:
nop_sputnik //просто переслать ответ reset_sputnik //аппаратно сбросить спутник test_i2c_sputnik //протестировать наличие устройств i2c и вернуть их адрес make_log //сделать лог в eeprom на тот случай, если энергии для передачи пакета по радио не останется Ааналоговая часть: test_5_volt //тестировать напряжение 5ти вольтовой линии test_buttery_volt //протестировать напряжение с батарейки test_current_sensors //проверить ток питания сенсоров beep_sputnik //бибикнуть через динамик ну и на всякий случай: switch_off_termometr switch_on_termometr switch_off_pressue switch_on_pressue switch_off_humidity switch_on_humidity
Пока собирал, решил добавить пищалку, как систему взаимодействия с внешним миром.
Соединив все это в кучу, я очень удивился, когда все заработало с первого раза. Но как оказалось, ненадолго.., а пока фото спутника:
И приемник на земле:
Я уже в предвкушении, подключаю батарейку, светодиоды загораются. Все работает, приемник опрашивает спутник раз в 10 секунд.
Делал я это ночью, отправил спутник на балкон в картонной коробке, приемник подключил к ноуту и лег спать. Сие действо происходило в конце августа, так что не удивляйтесь теплой погоде, сейчас у нас -10.
На утро сразу бегу проверять данные и облом.
temp = 18.20
pressure = 57370
light = 0
data = 1
value = 623
На следующем графике температура за ночь в градусах Цельсия (информация снята с датчика BMP180). В какой-то момент (смотри график) BMP180 перестал работать:
Ниже на графике — давление (в Паскалях). И да…, я сам не знаю, что это за пик в середине:
Влажность (в процентах) — (влажность 100% похожа на правду — той ночью был дождь):
Так как дело было ночью, датчик света почти постоянно показывал 0, кроме того времени, когда в комнате горел свет.
Разбор причин отказа
Отказал только BMP180 (хотя, я думал, что вырубится DHT22). Шина I2C, с помощью которой подключались BMP180 и BH1750FVI,
В общем, я ни в чем не уверен, но думаю, что BMP180 сдох из-за влажности.
Изначально я специально не измерял ток, потребляемый спутником и не сильно удивился, когда батарейка села через 1 час 43 минут.
В общем и целом — полный провал.
В следующий раз хочу добавить режимы сна, сделать какую–то систему автопроверки данных, например, при резких скачках (как значение давления в ту ночь) или если долгое время — датчик отсылает одинаковые данные (как датчик температуры). Лечить это я планирую перезагрузкой датчика. И, в далеком будущем, возможно, после сдачи ЕГЭ, перепишу все на чистом Си и сделаю полноценную плату на Atmega8 или STM32, чтобы трудилась в составе погодной станции.
P.S. Подскажите какую-нибудь программу для обработки больших массивов данных, а то в Excel не очень удобно.
Автор: 10s