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

Мини-метеостанция Arduino UNO

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

Arduino UNO
× 1
Espressif ESP8266 ESP-01
× 1
Arduino Proto Shield
или обычный макет
× 1
Датчик температуры DHT22
× 1
Seeed Grove - датчик освещенности
× 1
Seeed Grove - УФ-датчик
× 1
Seeed Grove - датчик барометра
× 1
Seeed Grove - датчик пыли
× 1
Резистор 1 кОм
× 2
Резистор 10 кОм
× 1
Резистор 4,75 кОм
× 1
Перемычки (общие)
× 1

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

IDE Arduino
ThingSpeak API

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

Это первое поколение моей мини-метеостанции на базе Arduino с подключением Wi-Fi, которая может публиковать данные в Интернете с помощью платформы ThingSpeak.

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

  • Температура
  • Влажность
  • Атмосферное давление
  • Интенсивность света
  • УФ-индекс
  • Концентрация пыли

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

Приступим и веселимся!

Электронные компоненты

Для сборки этого проекта вам не потребуются специальные инструменты. Все компоненты можно найти в Интернете в вашем любимом интернет-магазине.

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

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

Соединение частей

Подключите все компоненты согласно схеме. Вам понадобятся перемычки для подключения каждого датчика к макетной плате. Вы можете использовать протощит (для более компактной схемы), обычную макетную плату или разработать собственный щит Arduino.

Подключите USB-кабель к плате Arduino Uno и переходите к следующему шагу.

Код

Предполагая, что вы уже установили последнюю версию Arduino IDE, загрузите и установите следующие библиотеки:

  • Библиотека DHT22
  • Библиотека Adafruit BMP085

Инструкции по добавлению библиотек в Arduino IDE см. В следующем руководстве по Arduino.

Загрузите код Arduino ( weatherBox.ino ) включены в раздел кода. Заменить XXXXX по SSID вашего Wi-Fi роутера, YYYYY по паролю маршрутизатора и ZZZZZ на вашем канале ThingSpeak напишите ключ API (как получить его на следующем шаге).

Подключите плату Arduino к USB-порту компьютера и загрузите код.

Конфигурация ThingSpeak

  • Создайте учетную запись ThingSpeak
  • Создать новый канал

Укажите название и описание вашей метеостанции. Назначьте следующие каналы и сохраните канал:

  • канал 1 =свет
  • канал 2 =влажность
  • канал 3 =температура (из DHT22)
  • канал 4 =УФ-индекс
  • канал 5 =концентрация пыли
  • канал 6 =давление
  • канал 7 =температура (из BMP085)

Скопируйте ключ записи API. Он используется на предыдущем шаге в коде Arduino. При включении станции значения датчиков будут периодически выгружаться на канал. Вы можете настроить публичную и приватную визуализацию каждой переменной.

Пример общедоступного канала:https://thingspeak.com/channels/35540

Использование приложения для Android

Вы сможете визуализировать данные метеостанции в любом браузере. Но вы также можете проверить это на своем смартфоне на базе Android и визуализировать его, когда захотите.

  • Загрузите и установите приложение ThingsView из магазина Google Play на свое устройство Android.
  • В приложении введите идентификатор своего канала и нажмите "Добавить". Вы найдете идентификатор в конфигурации вашего канала ThingSpeak.
  • Текущие значения каждой переменной будут отображаться на графике.

Удачи!

Код

  • weatherBox.ino
weatherBox.ino Arduino
 #include  #include  #include  #include  #include  #include  #define SSID "XXXXX "// замените XXXXX на SSID вашего маршрутизатора # define PASS" YYYYY "// замените YYYYY паролем вашего маршрутизатора # define IP" 184.106.153.149 "// IP thingspeak.com # define DHT22_PIN 2String GET =" GET / update? key =ZZZZZ &field1 ="; // заменить ZZZZZ на ваш канал ThingSpeak write keySoftwareSerial monitor (10, 11); // Последовательная связь с модулем ESP8266 (RX, TX) dht DHT; Adafruit_BMP085_Unified bmp =Adafruit_BMP085_Unified (10085); // Variablesint luminancePin =A0; int uvPin =A1; int dustPin =8; unsigned long duration; unsigned long starttime; unsigned long sampletime_ms =30000; unsigned long delay_time =60000; unsigned long lowpulseoccupancy =0; float ratio =0; float density =0; // setupvoid setup () {// запускаем последовательную связь Serial.begin (9600); monitor.begin (9600); Serial.println («Инициализация ...»); // настраиваем контакты Arduino pinMode (dustPin, INPUT); // инициализируем датчик давления Serial.println ("Обнаружение датчика давления BMP085 ..."); if (! bmp.begin ()) {Serial.println («Датчик BMP085 не обнаружен. Проверьте соединения или I2C ADDR!»); в то время как (1); } Serial.println («Обнаружен BMP085!»); // связь с модулем Wi-Fi monitor.flush (); monitor.println («AT»); задержка (2000); if (monitor.find ("OK")) {Serial.println ("Связь с модулем ESP8266:OK"); } else {Serial.println ("ОШИБКА модуля ESP8266"); } // подключаем Wi-Fi роутер connectWiFi (); Serial.print ("Выборка ("); Serial.print (sampletime_ms / 1000); Serial.println ("s) ..."); // инициализируем таймер starttime =millis ();} void loop () {// измерение длительности частиц пыли =pulseIn (dustPin, LOW); низкая занятость =низкая занятость + продолжительность; // 30-секундный цикл if ((millis () - starttime)> =sampletime_ms) {ratio =lowpulseoccupancy / (sampletime_ms * 10.0); // процентная (от 0 до 100%) концентрация =1,1 * pow (ratio, 3) -3,8 * pow (ratio, 2) + 520 * ratio + 0,62; // из таблицы lowpulseoccupancy =0; // читаем другие датчики char buffer [10]; // датчик освещенности float luminance =analogRead (luminancePin); // УФ датчик float uv =analogRead (uvPin); uv =uv * 0,0049; // преобразовываем значения в вольты uv =uv * 307; // конвертируем в мВт / м² uv =uv / 200; // вычисляем УФ-индекс // температура и влажность int chk =DHT.read22 (DHT22_PIN); влажность поплавка =DHT. влажность; температура поплавка =температура DHT; // датчики давления и температуры1 событие_event_t; bmp.getEvent (&событие); давление поплавка =0; температура поплавка1 =0; если (событие.давление) {давление =событие.давление; bmp.getTemperature (&temperature1); } // преобразовываем значения датчика в строки String luminanceStr =dtostrf (luminance, 4, 1, buffer); luminanceStr.replace ("", ""); Строка uvStr =dtostrf (uv, 4, 1, буфер); uvStr.replace ("", ""); Строка влажностьStr =dtostrf (влажность, 4, 1, буфер); влажностьStr.replace ("", ""); Строка temperatureStr =dtostrf (температура, 4, 1, буфер); temperatureStr.replace ("", ""); Строка dustStr =dtostrf (концентрация, 4, 1, буфер); dustStr.replace ("", ""); String pressureStr =dtostrf (давление, 4, 1, буфер); pressureStr.replace ("", ""); Строка temperature1Str =dtostrf (temperature1, 4, 1, buffer); temperature1Str.replace ("", ""); // отправляем данные в ThingSpeak updateSensors (luminanceStr, влажностьStr, temperatureStr, uvStr, dustStr, pressureStr, temperature1Str); // ждем следующего цикла выборки Serial.print ("Wait"); Serial.print (delay_time / 1000); Serial.println ("s для следующей выборки"); Serial.println (); задержка (delay_time); // инициализируем новый цикл Serial.println (); Serial.print ("Выборка ("); Serial.print (sampletime_ms / 1000); Serial.println ("s) ..."); время начала =миллис (); }} // Отправляем данные в ThingSpeakvoid updateSensors (String luminanceStr, String влажность, String temperatureStr, String uvStr, String dustStr, String pressureStr, String temperature1Str) {String cmd ="AT + CIPSTART =\" TCP \ ", \" "; cmd + =IP; cmd + ="\", 80 "; monitor.println (cmd); задержка (2000); cmd =GET; cmd + =luminanceStr; cmd + ="&field2 ="; cmd + =влажностьStr; cmd + ="&field3 ="; cmd + =temperatureStr; cmd + ="&field4 ="; cmd + =uvStr; cmd + ="&field5 ="; cmd + =dustStr; cmd + ="&field6 ="; cmd + =pressureStr; cmd + ="&field7 ="; cmd + =temperature1Str; cmd + ="\ г \ п"; задержка (1000); int strsize =cmd.length (); monitor.println ("AT + CIPSEND =" + String (strsize)); задержка (2000); monitor.print (cmd); if (monitor.find ("OK")) {Serial.println ("Передача успешно завершена"); } else {Serial.println ("Ошибка передачи!"); }} void sendDebug (String cmd) {Serial.print ("ОТПРАВИТЬ:"); Serial.println (cmd); monitor.println (cmd);} логическое connectWiFi () {Serial.println ("Подключение Wi-Fi ..."); Строка cmd ="AT + CWMODE =1"; monitor.println (cmd); задержка (2000); monitor.flush (); // очистить буфер cmd ="AT + CWJAP =\" "; cmd + =SSID; cmd + =" \ ", \" "; cmd + =PASS; cmd + =" \ ""; monitor.println (cmd); задержка (5000); if (monitor.find ("OK")) {Serial.println ("Соединение успешно!"); вернуть истину; } else {Serial.println ("Ошибка подключения!"); вернуть ложь; } Serial.println ();} 
Github
https://github.com/adafruit/DHT-sensor-libraryhttps://github.com/adafruit/DHT-sensor-library
Github
https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-Library

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

  1. Метеостанция Raspberry Pi
  2. Робототехническая система для обнаружения человека с использованием Arduino Uno
  3. Мониторинг CO2 с помощью датчика K30
  4. Какой ты рост?
  5. WebServerBlink с использованием Arduino Uno WiFi
  6. Простой калькулятор UNO
  7. Башня датчика облаков Arduino
  8. Постоянство видения
  9. Местная метеостанция
  10. Станция мониторинга состояния здоровья