СОДЕРЖАНИЕ ►
Метеостанция на Ардуино своими руками — еще один проект с использованием температурного датчика LM35 или цифрового датчика температуры и датчика DHT11 с передачей данных на смартфон или планшет на ОС Andrioid. Воспользовавшись информацией из этой статьи, вы сможете создать миниатюрную домашнюю метеостанцию и получать данные о температуре через приложение на смартфоне.
Перед тем, как приступить к сборке проекта, следует сделать настройку блютуз модуля для возможности передачи данных от Ардуино на смартфон или планшет. Кроме имени и пин-кода, следует установить режим работы модуля HC-05/HC-06, как slave с помощью AT-команды AT+ROLE=0. Также необходимо изменить еще один параметр – CLASS, значение должно быть равно 7936 с помощью команды AT+CLASS=7936.
Метеостанция на Ардуино с блютуз
Для этого проекта потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- Bluetooth модуль HC-05/HC-06;
- датчик LM35 или DHT11;
- смартфон с ОС Andrioid;
- макетная плата;
- провода «папа-папа», «папа-мама».

В данном проекте мы представим два варианта скетча для метеостанции — с датчиком DHT11 и с датчиком температуры LM35. Приложение на смартфоне подходит к двум вариантам. После прошивки модуля, соберите домашнюю метеостанцию, как на схеме выше и загрузите скетч. Оба скетча с приложением для смартфона и всеми необходимыми библиотеками можно скачать одним архивом здесь.
Скетч для метеостанции на Ардуино с DHT11
#include <SoftwareSerial.h> // подключение библиотеки SoftwareSerial.h SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно #include "DHT.h" // подключаем библиотеку для датчика DHT dht(8, DHT11); // сообщаем на каком порту будет датчик String stringT = String("*"); String stringH = String("%"); void setup() { Serial.begin(9600); // запуск аппаратного последовательного порта mySerial.begin(9600); // запуск программного последовательного порта dht.begin(); // запуск датчика DHT11 } void loop() { float h = dht.readHumidity(); // считываем значение температуры float t = dht.readTemperature(); // считываем значение влажности Serial.println(t + stringT); // отправляем значение температуры на монитор Serial.println(h + stringH); // отправляем значение влажности на монитор Serial.println(""); mySerial.println(t + stringT); // отправляем значение температуры на телефон mySerial.println(h + stringH); // отправляем значение влажности на телефон delay(10000); // ставим задержку на 10 секунд }
Пояснения к коду:
- массивы
stringTиstringHнужны в этом скетче, чтобы приложение на телефоне считывало данные с нужным символом в соответствующей строке; - блютуз модуль HC-05/06 работает на частоте 9600 бит/сек —
mySerial.begin(9600).
После загрузки скетча, скачайте и установите на своем телефоне приложение dht11.apk — снимки экрана размещены на картинке выше. Выполните сопряжение смартфона и блютуз модуля, согласно этой статьи — Подключение блютуз модуля и запустите приложение. Далее вам необходимо подключиться к блютуз метеостанции, нажав на кнопку «Подключиться» и дождаться обновления данных с датчика DHT11.

Как сделать метеостанцию на LM35
В следующем скетче для определения температуры был использован датчик LM35, подключенный к аналоговому порту. Для точности измерений температуры необходимо будет откалибровать датчик. В этом примере измеряется только температура, при этом данные отправляются на смартфон только в том случае, если произошло изменение температуры или нажата кнопка «Обновить» в приложении.
Скетч для метеостанции на Ардуино с LM35
#include <SoftwareSerial.h> // подключение библиотеки SoftwareSerial.h SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно int temp1; // освобождаем память для переменной "temp1" int temp2; // освобождаем память для переменной "temp2" int temp3; // освобождаем память для переменной "temp3" float temp; // освобождаем память для переменной "temp" byte val; // освобождаем память для переменной "val" String stringT = String("*"); void setup() { pinMode(A0, INPUT); // сенсор LM35 подключим к аналоговому входу A0 Serial.begin(9600); // запуск аппаратного последовательного порта mySerial.begin(9600); // запуск программного последовательного порта } void loop() { temp1 = analogRead(A0); // считываем значение с датчика delay(60000); temp2 = analogRead(A0); // повторно считываем значение с датчика temp3 = temp1 - temp2; // определяем, изменилась ли температура // отправляем сообщение только, когда изменилась температура if (temp3 != 0) { temp = ( temp2/1023.0 )*5.0*1000/10; // вычисляем значение температуры mySerial.println(temp + stringT); // отправляем температуру на телефон Serial.println(temp + stringT); // отправляем температуру на монитор Serial.println(""); } // отправляем сообщение, когда нажата кнопка "обновить" в приложении if (Serial.available()) // проверяем, поступают ли какие-то команды { val = Serial.read(); // переменная val равна полученной команде if (val == '1') { temp = ( temp2/1023.0 )*5.0*1000/10; // вычисляем значение температуры mySerial.println(temp + stringT); // отправляем температуру на телефон Serial.println(temp + stringT); // отправляем температуру на монитор Serial.println(""); } } }
Если у вас остались вопросы, то можете их задать в комментариях к этой статье.









А как установить библиотеку, у меня не получается?
Инструкция по установке библиотек в Arduino IDE:
http://роботехника18.рф/ардуино-установка-библиотек/
Годный проект
У вас на схеме подключение к пину номер 8, а в программе к 7 (я думаю так не было задумано)
Спасибо за подсказку. Исправили опечатку
А можно ли сделать подобное на модуле барометре BMP180 , BMP280
почему температура вычисляется таким способом «temp = ( temp2/1023.0 )*5.0*1000/10».
Не понимаю откуда эти числа.