Создаем собственную метеостанцию, интегрированную с Wolfram Cloud

http://blog.wolfram.com/2015/03/17/build-your-own-weather-station-in-a-snap-with-the-wolfram-cloud/
  • Перевод
Недавно Стивен Вольфрам анонсировал сервис Wolfram Data Drop, который является отличным инструментом для загрузки любых типов данных с любого устройства. Я покажу как можно использовать Wolfram Data Drop с самодельной метеостанцией, для создания которой нам понадобятся лишь простое железо и несколько строчек кода. Эта метеостанция будет производить измерения температуры каждую секунду, и каждую минуту производить выгрузку среднего за эту минуту значения в Wolfram Data Drop. Таким образом, будет получаться 60 точек на графике температура– время каждый час, 1440 точек в сутки. Используя эти данные и Wolfram Programming Cloud, можно изучать изменения температуры с течением времени. К примеру, можно выяснить, сколько раз за день температура достигала определённых минимальных и максимальных значений, когда температура изменялась наиболее быстро. С помощью этих данных можно даже составлять прогнозы. Быть может, у кого-то даже получится сделать более точные предсказания, чем у местной метеостанции!

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_1.png

Как построить собственную метеостанцию


Для этого эксперимента Вам понадобятся:

1) Arduino Yún (или эквивалент, но обязательно с Wi-Fi);

2) датчик температуры TMP36;

3) макетная плата и провода.

Здесь представлена схема сборки. Подключите 5V на левый вывод TMP36, заземление на правый вывод TMP36, и A0 на средний вывод TMP36.

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_2.png

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_3.gif

Как только всё подключено и включено, сенсор начинает передавать напряжение на вывод А0. Если растёт температура, то растёт и напряжение, а если температура падает, то и напряжение, соответственно, тоже падает. Таким образом, мы можем снимать показатели напряжения и интерпретировать их как температуру. К счастью, в этом эксперименте нам понадобится только три небольших провода, что позволяет избежать ситуации как на картинке ниже с этим несчастным:

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_4.gif

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_5.gif

Программирование Arduino


Теперь мы готовы написать код для Arduino, который будет загружать записанные данные о температуре на Wolfram Cloud. Убедитесь, что ваш Arduino Yun настроен для подключения к Интернету. Затем, с помощью приложения Arduino, загрузить следующий код на Arduino после замены текста “YOUR_BIN_ID” на “Short ID», который выводится как результат выполнения функции CreateDatabin[].

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_6.png

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_7.gif

Небольшое разъяснение касательно того, что делает код: переменная р используется для вызова инструмента под названием curl, который позволяет создавать HTTP-запросы с Arduino.

В нашем случае мы задаем конкретный URL для Wolfram Data Drop, который позволяет загружать данные о температуре. В цикле loop(), который можно увидеть в коде, можно наблюдать, как переменная val читается из аналогового входа (A0), и как val затем преобразуется из начальных значений в значение температуры temperature.

Эту температуру затем добавляют к среднему значению average ровно 60 раз, но на 60-й раз программа вычислит второй блок с If[].

Этот блок кода инициализирует код загрузки данных, который отправляет среднее значение 60 измерений.

Это также сбрасывает все счетчики, так что все начнется снова.

Далее следует 1000-милисекундная задержка, которая упорядочит записанные за секунду даннные:

#include < Bridge.h >
  
  Process p;
int val, count;
float voltage, temperature, average;

void setup () {
   count = 0;
   average = 0;
   Bridge.begin ();
   Serial.begin (9600);
  }

void loop () {
   val = analogRead (0);
   voltage = val * 5.0;
   voltage = voltage/1024.0;
   temperature = (voltage - 0.5)*100;
   average += temperature;
   count++;
   if ( count > 59 ) {
      p.begin ("/usr/bin/curl");
      p.addParameter ("--insecure");
      p.addParameter ("--location");
      p.addParameter ("https://datadrop.wolframcloud.com/api/v1.0/Add?bin=YOUR_BIN_ID&temperature=" + String (average/60));
      p.run ();
      while (p.available () > 0) {
         char c = p.read ();
         Serial.print (c);
        }
       Serial.println ();
      Serial.flush ();
      count = 0;
      average = 0;
     }
    delay (1000);
  }

Чтобы убедиться, что всё работает, можно открыть встроенный монитор Arduino; в случае, если всё идет как надо, Вы увидете сообщения наподобие того, что ниже, которые будут появляться каждую минуту (или около того):

<|"Message" -> "The data was successfully added.", "Bin" -> "DD7051e03ace9-a194-44c1-9864-8fcef8ea9af3", "Data" -> <|"temperature" -> "34"|>, "Timestamp" -> {2015, 2, 9, 16, 18, 39.99526`8.354583502904967}, "Information" -> {"EntryCount" -> 1, "LatestTimestamp" -> 3632487520, "Size" -> 288}|>

Теперь самое время поместить наше устройство во что-то герметичное (в моем случае – Hefty bag), и поместить в место, которое весь день находится в тени (допустим, на веранде):

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_8.gif

Анализ данных о температуре


Теперь мы готовы сделать несколько интересных вещей с полученными данными о температуре. Лучше всего будет собрать данных, как минимум, за один день, прежде чем начать анализ, однако код позволяет работать и с меньшим количеством данных. Сперва нам нужно получить данные из databin, который мы использовали для загрузки данных по температуре.

Программа на Arduino передает температуру в виде параметра URL, что мы и используем в нашей программе. В моем примере databin собрал данные за 20 дней (для проведения эксперимента необходимо заменить “YOUR_BIN_ID” на bin ID, который был получен в результате выполнения CreateDatabin ранее:

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_9.gif

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_10.gif

Теперь нам необходимо будет преобразовать данные по температуре (temperature event series) с помощью еще нескольких шагов.

Во-первых, посредством TimeSeriesShift нужно внести данные по часовому поясу.

Далее следует откалибровать датчик, опираясь на данные с ближайших крупных метеостанций. Лично я калибровал свой двухдолларовый TMP36, опираясь на данные с одной из метеостанций национального управления океанических и атмосферных исследований (NOAA KCMI), где располагается несравнимо более дорогое и точное оборудование. Калибровка – очень важный шаг; мне пришлось в результате калибровки править свои данные примерно на 5 градусов, чтобы они соответствовали официальным. Есть еще один хороший способ калибровки: поместить датчик в ледяную воду с температурой 0 градусов, а затем в стакан кипятка (100 градусов), и скорректировать полученные данные.

Далее необходимо выбрать интересующий временной интервал. В моём случае точка отсчёта есть 22 января 9 часов утра. Вам, соответственно, следует заменить эту дату на ту, которая соответствует началу Ваших измерений.

Наконец, следует переразбить данные на интервалы по 15 минут, то есть для построения будем использовать в 15 раз меньше точек. Дело в том, что что этих данных будет вполне достаточно для работы с интервалами, которые измеряются в днях.

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_11.gif

Тут можно сделать быструю проверку – корректно ли выглядят данные по температуре:

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_12.png

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_13.gif

На этом работа с данными не заканчивается, и мы можем сделать весьма занятные и полезные вещи, используя их. Можно написать функцию, которая будет собирать минимальные/максимальные значения температуры в каждый конкретный день, или любые другие примечательные значения:

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_14.png

Функция, представленная ниже, создает новый ряд событий (EventSeries) из заданного и собирает те точки, которые удовлетворяют определенной функции для данного дня.

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_15.png

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_16.gif

Теперь можно проделать то же самое для ежедневных максимумов температур:

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_17.png

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_18.gif

Теперь мы можем отобразить температурные данные (фиолетовый) на графике с дневными максимумами (красные точки) и минимумами (синие точки):

Build-Your-Own-Weather-Station-in-a-Snap-with-the-Wolfram-Cloud_19.png

Graphics:Temperature (&amp;deg;C) in Savoy, Illinois

Заключение


Теперь у нас имеется собственная рабочая метеостанция и поступающие данные, которые можно легко анализировать. Изменяя представленный код, можно визуализировать дневные, недельные либо месячные средние значения температуры. Так же можно попробовать прогнозировать температуру на завтра, опираясь на замеченные ранее зависимости и, возможно, объединяя данные по температуре с какими-то дополнительными: влажность, давление и тому подобное.

Перевод поста Arnoud Buzing, «Build Your Own Weather Station in a Snap with the Wolfram Cloud!».
Скачать перевод в виде документа Mathematica, который содержит весь код использованный в статье можно здесь.
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.
  • +11
  • 9,2k
  • 8
Wolfram Research 45,50
Wolfram Language, Mathematica, Wolfram Alpha и др.
Поделиться публикацией
Комментарии 8
  • +6
    Громкое слово метеостанция для термометра
    • 0
      Добавить по аналогии датчики давления, влажности, освещенности — и это уже по сути готовая метеостанция по довольно маленькой цене. Вполне неплохо можно использовать в ряде стартапов.
      • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      производить измерения температуры каждую секунду


      вот реально, нафига?
      • 0
        В самогоноварении обвешать аппарат датчиками и наблюдать в прямом эфире, не подходя к плите.
      • +2
        кстати давно хотел у какого-нибудь спеца по вольфрамальфе спросить, где это реально применяется на практике?

        ведь крупная фирма, вкладывает большие деньги в разработку этой системы, вроде по обзорам она может все (одной командой подгружает инфу о планетах, парсит википедию и тд), выглядит очень круто

        но, у кого ни спрошу, а я работаю в сфере анализа данных и машинного обучения, никто не использует (раз в месяц побыстрому отрисовать график что бы не грузить питон или R — не в счет); спрашивал людей из смежных областей, математиков, физиков, и там никого не нашел, ну хоть бы одного

        эти два фактора: серьезный продукт + из моей выборки никто не пользуется, наталкивают на мысль, что Стивен делает игрушку для себя =) но это тоже наверняка не так

        поведуйте плз, так кто же эти люди, кто использует эту систему в своей работе?

        у меня вариант, что студенты которым вуз проплатил аккаунт, они там наверное домашки по матану делают, но они как бы не в счет, интересно кто использует это как рабочий инструмент для зарабатывания
        • 0
          Из того, что вы написали вначале, а именно «спеца по вольфрамальфе», я могу заключить, что вы пока что еще не прочувствовали разницу между Wolfram|Alpha и Mathematica. Я могу описать подробно, если потребуется, но вообще говоря это довольно распространенное непонимание (заблуждение) в России.

          На данный момент на территории РФ действительно система используется недостаточно широко. В частности поэтому мы завели блог, чтобы показать и рассказать о возможностях системы Mathematica и языка Wolfram Language, а также о ряде других продуктов компании, которых немало.

          Лично я работал (и работаю) в разное время с разными компаниями, которые активно используют (или начинают использовать Wolfram Language), среди них: ОАО «Валента Фарм», Центробанк, Группа компаний ЛАНИТ, ООО «БАЛАСС», Яндекс, Газпром, Evika, Schneider Electric и др.

          Мой коллега Андрей Макаренко (группа Конструктивная кибернетика) может добавить в этот список еще множество названий.

          Что касается компаний, которые применяют Wolfram Language зарубежом, то список будет просто огромный.

          Сейчас, кстати, очень активно начал применять все технологии Wolfram Китай, так активно, что Wolfram|Alpha уже скоро заработает на китайском, а также будет перевод всей документации на этот язык.

          Надеюсь, что вы тоже найдете полезным применять продукты Wolfram.
          • +1
            да действительно я слабо представляю сете разницу между Wolfram|Alpha и Mathematica, я думал это одно и тоже, просто одно в онлайне, а другое нет

            так а на счет примеров задач то? прикольно конечно отрисовать 10к знаков числа пи -) но просто хочется прочитать о преимуществах

            скажем нужно сделать систему анализа изображений для конкурса www.kaggle.com/c/diabetic-retinopathy-detection, какие способы есть в Mathematica и чем sklearn в питоне или r

            или скажем от машинного обучения если отойти, нужно численно порешать уравнение Навье-Стокса для какого-нибудь частного случая, какие преимущества над ansys

            в общем мне кажется я слабо представляю где используется Wolfram|Alpha и Mathematica, хотелось бы знать по подробнее

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое