Pull to refresh

Спутник на балконе

Reading time 3 min
Views 73K


Недавно прочитал две статьи на Хабре про 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, как тут, но панели не хватало мощности.

Я не стал заморачиваться с качеством кода – все равно делаю на Ардуино. Код сюда приводить не буду, потому что он некрасивый. Каждый, кто захочет сделать что-то подобное, сам найдет все необходимое, благо интернет и так завален кучей примеров для работы с датчиками.

Зато питание я развел особое: с фильтрами и
датчиком тока, в виде резистора.
Питание для датчиков (DHT22, BMP180 и BH1750FVI) берется с ножки контроллера, чтобы можно было отключать, если что не так, а между землей датчиков и землей контроллера ставится резистор в 100 Ом, чтобы на нем падало какое-то напряжение, когда датчики работают. Ардуина меряет напряжение, и с помощью закона Ома можно вычислить ток, потребляемый датчиками.

Не знаю, зачем фильтры при питании от батарейки, но звучит круто.

Управление
Команды я придумывал так, чтобы можно было отлаживать спутник, как если бы он был прямо у меня на столе, а не на балконе (открытом).

Команды:
   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.

На утро сразу бегу проверять данные и облом.
последний ответ от спутника
humidity = 99.90
temp = 18.20
pressure = 57370
light = 0
data = 1
value = 623


На следующем графике температура за ночь в градусах Цельсия (информация снята с датчика BMP180). В какой-то момент (смотри график) BMP180 перестал работать:



Ниже на графике — давление (в Паскалях). И да…, я сам не знаю, что это за пик в середине:



Влажность (в процентах) — (влажность 100% похожа на правду — той ночью был дождь):



Так как дело было ночью, датчик света почти постоянно показывал 0, кроме того времени, когда в комнате горел свет.

Разбор причин отказа


Отказал только BMP180 (хотя, я думал, что вырубится DHT22). Шина I2C, с помощью которой подключались BMP180 и BH1750FVI,
вроде работала.
BH1750FVI отправлял 0 (для того чтобы подать байт, хранящий в себе 0, датчик должен прижать линию данных к нулю, но 0 на линии мог возникнуть и вследствие ошибки или плохого контакта).
В общем, я ни в чем не уверен, но думаю, что BMP180 сдох из-за влажности.

Изначально я специально не измерял ток, потребляемый спутником и не сильно удивился, когда батарейка села через 1 час 43 минут.

В общем и целом — полный провал.

В следующий раз хочу добавить режимы сна, сделать какую–то систему автопроверки данных, например, при резких скачках (как значение давления в ту ночь) или если долгое время — датчик отсылает одинаковые данные (как датчик температуры). Лечить это я планирую перезагрузкой датчика. И, в далеком будущем, возможно, после сдачи ЕГЭ, перепишу все на чистом Си и сделаю полноценную плату на Atmega8 или STM32, чтобы трудилась в составе погодной станции.

P.S. Подскажите какую-нибудь программу для обработки больших массивов данных, а то в Excel не очень удобно.
Tags:
Hubs:
+4
Comments 30
Comments Comments 30

Articles