Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Монитор погоды MKR FOX 1200

Компоненты и расходные материалы

Arduino MKR Fox 1200
× 1
Прорыв датчика атмосферы SparkFun - BME280
× 1
цифровой датчик освещенности TSL2561
× 1
HTU 1D
× 1

Приложения и онлайн-сервисы

Веб-редактор Arduino
ThingSpeak API
Sigfox

Об этом проекте

Примечание. Это руководство может быть устаревшим, перейдите здесь для более актуальной версии .

В этом проекте показано, как превратить MKR FOX 1200 и набор датчиков I2C в простую метеостанцию ​​с батарейным питанием.

Мы будем использовать:

  • встроенный датчик температуры (низкая точность, ± 1 ° C)
  • Датчик HTU21D I2C для определения уровня влажности
  • Bosch BMP280 для измерения атмосферного давления и точной температуры.
  • Датчик освещенности TSL2561 для измерения освещенности.

Настройка оборудования

Аппаратные соединения для этого проекта довольно просты:все датчики используют интерфейсы I2C и работают при напряжении 3,3 В.

Им нужны четыре провода от MKR FOX 1200:GND, 3,3 В, SDA на контакте 11 и SCL на контакте 12. Те же четыре соединения могут использоваться параллельно с тремя датчиками, потому что каждый из них имеет определенный адрес I2C и, следовательно, соответствующие библиотеки и функции позаботятся о различении каждой из них.

Весь проект может питаться от двух щелочных батарей AA или AAA, соединенных последовательно для генерации 3 В и подключенных к клеммной колодке с винтовыми зажимами на плате.

Сообщения Sigfox

Поскольку сеть Sigfox может отправлять не более 140 сообщений в день, мы оптимизируем показания и отправим данные в компактном двоичном формате.

Упаковка данных важна, потому что максимальный размер сообщения, которое вы можете отправить, составляет 12 байтов. Число с плавающей запятой занимает 4 байта, поэтому нам нужно упаковать наши показания в более мелкое представление.

Формат числа с плавающей запятой очень широкий (вы можете представлять числа размером до 3,402823e + 38 (!)), И нам не нужно все пространство данных; затем мы можем определить безопасные пределы (в зависимости от того, где мы собираемся развернуть станцию) и восстановить исходное представление в серверной части.

Конфигурация облачных сервисов

Мы будем использовать два облачных сервиса:

  • Серверная часть Sigfox
  • Thingspeak

Зарегистрируйте свою доску на бэкэнде Sigfox, используя PAC и идентификатор, предоставленный в примере FirstConfiguration (можно пропустить, если вы уже сделали это для предыдущего проекта).

Оба должны быть настроены так, чтобы разговаривать друг с другом и интерпретировать данные в правильном формате. Зарегистрируйтесь на обоих и создайте пару каналов на Thingspeak. Конфигурация показана на изображении ниже.

Первый канал, который мы настроим, будет тем, который принимает необработанные данные ( readChannelID ), а второй будет собирать масштабированные данные ( writeChannelID ).

Пришло время загрузить эскиз с помощью редактора Arduino Create Editor. Скетч по умолчанию позволяет тщательно протестировать всю инфраструктуру перед развертыванием в полевых условиях.

Не забудьте объявить:

  oneshot =false  

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

Нажмите ТИП УСТРОЙСТВА . -> СПИСОК -> щелкните правой кнопкой мыши свою доску и выберите Изменить .

Нажмите ОТЗЫВЫ . в меню слева:

Вы увидите такие окна:

Нажмите Создать . кнопка в правом верхнем углу окна:

Выберите Пользовательский обратный вызов .

Соответствующие конфигурации указаны ниже. Убедитесь, что обратный вызов настроен как:

  • ТИП: DATA / UPLINK
  • Канал: URL
  • Метод HTTP: GET

В качестве пользовательской полезной нагрузки установите:

  status ::uint:8 temp1 ::int:16:little-endian temp2 ::int:16:little-endian press ::uint:16:little-endian гул ::uint:16:little -endian light ::uint:16:little-endian lastMsg ::uint:8  

Это представляет собой структуру, которую мы упаковали в эскиз. Мы назначаем переменную каждому полю, чтобы мы могли ссылаться на них в обратном вызове HTTP.

В качестве шаблона URL установите:

  https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData # light} &field6 ={customData # status} &field7 ={customData # lastMsg}  

После настройки ваши окна должны быть такими:

Не забудьте изменить ключ API api_key с тем, который предоставляется Thingspeak как Write API Key для Channel1 .

Сохранить и выйти. Теперь мы можем открыть последовательный порт и наблюдать за отправкой первого сообщения. Ура!

От Raw к графике

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

 % TODO - замените [] идентификатором канала для чтения данных:readChannelID =[]; % TODO - введите ключ API чтения между "" ниже:readAPIKey ='T6UK7XO6A4H2AGT7'; % TODO - замените [] идентификатором канала для записи данных:writeChannelID =[]; % TODO - введите ключ API записи между "" ниже:writeAPIKey ='XU4TGY261P6B5USN'; %% Прочитать данные %% data =thingSpeakRead (readChannelID, 'ReadKey', readAPIKey, 'OutputFormat', 'table'); проанализированные данные =данные; %% Анализ данных %% INT16_t_MAX =32767; UINT16_t_MAX =65536; проанализированные данные. ('Температура1') =данные. ('Температура1') / INT16_t_MAX * 120; проанализированные данные. ('Температура2') =данные. ('Температура2') / INT16_t_MAX * 120; проанализированные данные. ('Давление') =данные. ('Давление') / UINT16_t_MAX * 200000; AnalysisData. ('Light') =data. ('Light') / UINT16_t_MAX * 100000; проанализированные данные. ('Влажность') =данные. ('Влажность') / UINT16_t_MAX * 110; %% Запись данных %% thingSpeakWrite (writeChannelID, analysisData, 'WriteKey', writeAPIKey); %% Запланировать действие:React -> каждые 10 минут  

Заменив идентификаторы каналов с нашими собственными, мы наконец можем преобразовать необработанные данные в фактические значения. Не забудьте запланировать действие анализа каждые 10 минут с помощью React или он никогда не будет выполнен!

Наконец-то у нас есть замечательные графики.

Код

WeatherMonitor

Производственный процесс

  1. Метеостанция Raspberry Pi
  2. Weather Monitor
  3. Создание монитора Ambilight с помощью Arduino
  4. Мониторинг CO2 с помощью датчика K30
  5. Монитор сердечного ритма с использованием Интернета вещей
  6. Погодное окно Arduino + ESP
  7. Какой ты рост?
  8. Емкостной датчик отпечатков пальцев с Arduino или ESP8266
  9. Башня датчика облаков Arduino
  10. Монитор качества воздуха своими руками с датчиком Sharp GP2Y1010AU0F