Мини-метеостанция Arduino UNO
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Это первое поколение моей мини-метеостанции на базе 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-libraryGithub
https://github.com/adafruit/Adafruit-BMP085-Libraryhttps://github.com/adafruit/Adafruit-BMP085-LibraryПроизводственный процесс
- Метеостанция Raspberry Pi
- Робототехническая система для обнаружения человека с использованием Arduino Uno
- Мониторинг CO2 с помощью датчика K30
- Какой ты рост?
- WebServerBlink с использованием Arduino Uno WiFi
- Простой калькулятор UNO
- Башня датчика облаков Arduino
- Постоянство видения
- Местная метеостанция
- Станция мониторинга состояния здоровья