Метеостанция на Ардуино и Андроид

Метеостанция на Ардуино с выводом на планшет

Метеостанция на Ардуино своими руками — еще один проект с использованием температурного датчика LM35 или цифрового датчика температуры и датчика DHT11 с передачей данных на смартфон или планшет на ОС Andrioid. Воспользовавшись информацией из этой статьи, вы сможете создать миниатюрную домашнюю метеостанцию и получать данные о температуре через приложение на смартфоне.

Видео. Метеостанция на Arduino и DHT11

Перед тем, как приступить к сборке проекта, следует сделать настройку блютуз модуля для возможности передачи данных от Ардуино на смартфон или планшет. Кроме имени и пин-кода, следует установить режим работы модуля HC-05/HC-06, как slave с помощью AT-команды AT+ROLE=0. Также необходимо изменить еще один параметр – CLASS, значение должно быть равно 7936 с помощью команды AT+CLASS=7936.

Метеостанция на Ардуино с блютуз

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

  • плата Arduino UNO;
  • bluetooth модуль HC-05/HC-06;
  • датчик LM35 или DHT11;
  • смартфон с ОС Andrioid;
  • макетная плата;
  • провода «папа-папа», «папа-мама».
Схема блютуз метеостанции на Ардуино
Схема блютуз метеостанции на Ардуино своими руками

В данном проекте мы представим два варианта скетча для метеостанции — с датчиком DHT11 и с датчиком температуры LM35. Приложение на смартфоне подходит к двум вариантам.  После прошивки модуля, соберите домашнюю метеостанцию, как на схеме выше и загрузите скетч. Оба скетча с приложением для смартфона и всеми необходимыми библиотеками можно скачать одним архивом здесь.

#include <SoftwareSerial.h>    //  подключение библиотеки SoftwareSerial.h
SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно

#include "DHT.h"   // подключаем библиотеку для датчика
DHT dht(7, 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 секунд
}

Пояснения к коду:

  1. Массивы stringT и stringH нужны в этом скетче, чтобы приложение на телефоне считывало данные с нужным символом в соответствующей строке;
  2. Блютуз модуль HC-05/06 работает на частоте 9600 бит/сек — mySerial.begin(9600).

На что обратить внимание:

  1. Данные одновременно отправляются на аппаратный и программный последовательный порт (на компьютер и на смартфон) каждые 10 секунд.
Приложение для метеостанция на смартфоне Андроид
Приложение для метеостанция на смартфоне Андроид

После загрузки скетча, скачайте и установите на своем телефоне приложение dht11.apk — снимки экрана размещены на картинке выше. Выполните сопряжение смартфона и блютуз модуля, согласно этой статьи — Подключение блютуз модуля и запустите приложение. Далее вам необходимо подключиться к блютуз метеостанции, нажав на кнопку «Подключиться» и дождаться обновления данных с датчика DHT11.

Как сделать метеостанцию на 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("");
}
  }

}

Если у вас остались вопросы, то можете их задать в комментариях к этой статье.


1 Star2 Stars3 Stars4 Stars5 Stars (5 votes, average: 5,00 out of 5)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *