Датчик влажности почвы для ардуино

Исходный код программы

В начале программы подключим библиотеки, необходимые для работы с датчиком DHT11 и ЖК дисплеем.

Когда вы скачаете эту библиотеку, добавьте ее в вашу Arduino IDE с помощью инструкции вида (или с помощью аналогичного пункта меню в Arduino IDE):

Затем определим контакты к которым подключен ЖК дисплей и датчик DHT и инициализируем их все в секции setup программы (скетча). Затем в секции loop мы с помощью функции dht считываем данные с датчика DHT и затем используем ряд dht функций чтобы извлечь из этих данных температуру и влажность и отобразить их на ЖК дисплее.

Символ градуса на экране ЖК дисплея будет формироваться, используя известное отображение его в виде символа.

Далее приведен полный текст программы.

Arduino

#include<dht.h> // подключаем библиотеку для использования dht функций
#include<LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // номера контактов, к которым подключен ЖК дисплей
#define dht_dpin 12
dht DHT;
byte degree =
{
0b00011,
0b00011,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
void setup()
{
lcd.begin(16, 2);
lcd.createChar(1, degree);
lcd.clear();
lcd.print(» Humidity «);
lcd.setCursor(0,1);
lcd.print(» Measurement «);
delay(2000);
lcd.clear();
lcd.print(«Circuit Digest «);
delay(2000);
}
void loop()
{
DHT.read11(dht_dpin); //считываем данные с контакта, к которому подключен датчик DHT11
lcd.setCursor(0,0);
lcd.print(«Humidity: «);
lcd.print(DHT.humidity); // отображаем значение влажности на экране ЖК дисплея
lcd.print(» %»);
lcd.setCursor(0,1);
lcd.print(«Temperature:»);
lcd.print(DHT.temperature); // отображаем значение температуры на экране ЖК дисплея
lcd.write(1);
lcd.print(«C»);
delay(500);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

#include<dht.h>      // подключаем библиотеку для использования dht функций
#include<LiquidCrystal.h>

LiquidCrystallcd(2,3,4,5,6,7);// номера контактов, к которым подключен ЖК дисплей

#define dht_dpin 12

dhtDHT;

bytedegree8=

{

0b00011,

0b00011,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000,

0b00000

};

voidsetup()

{

lcd.begin(16,2);

lcd.createChar(1,degree);

lcd.clear();

lcd.print(»   Humidity   «);

lcd.setCursor(,1);

lcd.print(»  Measurement «);

delay(2000);

lcd.clear();

lcd.print(«Circuit Digest «);

delay(2000);

}

voidloop()

{

DHT.read11(dht_dpin);//считываем данные с контакта, к которому подключен датчик DHT11

lcd.setCursor(,);

lcd.print(«Humidity: «);

lcd.print(DHT.humidity);// отображаем значение влажности на экране ЖК дисплея

lcd.print(» %»);

lcd.setCursor(,1);

lcd.print(«Temperature:»);

lcd.print(DHT.temperature);// отображаем значение температуры на экране ЖК дисплея

lcd.write(1);

lcd.print(«C»);

delay(500);

}

Сборка метеостанции с дисплеем 1602 и DHT11

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

  • плата Arduino UNO (NANO);
  • жидкокристаллический дисплей 1602 с I2C;
  • цифровой датчик DHT11 или DHT22;
  • провода «папа-мама», «папа-папа»;
  • макетная плата (при необходимости).

К Arduino Nano и Uno все датчики и дисплей подключаются по одной схеме — распиновка и подключение уже рассматривались на нашем сайте, поэтому не будем подробно останавливаться на этом моменте. Если у вас есть вопросы, то посмотрите следующие записи: Подключение DHT11 к Ардуино и Подключение LCD 1602 к Ардуино. Соберите метеостанцию на Ардуино с дисплеем 1602 и dht11, как на схеме ниже.

Терморезистор NTC

Как было сказано выше, термистор — это температурный детектор, который преобразует тепловые показания в уровень сопротивления.

Существует два типа таких датчиков:

  • PTC – positive temperature coefficient – измеритель, в котором уровень сопротивления повышается вместе с ростом температурных показателей;
  • NTC – negative temperature coefficient – датчик, снижающий показатель сопротивления при повышении уровня тепла.

В случае с Arduino датчик температуры подобного типа, который можно было бы привести в качестве примера — это NTC MF 58 100K.

Технические характеристики данного прибора:

  1. сопротивление 100 кОм;
  2. температурный диапазон -30/+300 градусов Цельсия;
  3. погрешность не более 1%.

Данный прибор позиционируется как высокоточный, быстрый прибор, способный работать без сбоев довольно долгое время.

Область применения терморезистора данной модели — системы отопления и кондиционирования, термометры и домашние метеостанции, измерительные приборы в автомобилях, батареи мобильных устройств и многое другое.

Работа с библиотекой DallasTemperature

Библиотека для Arduino DallasTemperature Sensors OneWire значительно облегчает и упрощает работу с сенсором DS18B20. Описание библиотеки DallasTemperature.h на русском говорит, что датчик управляется несколькими простыми функциями, которые представлены в следующем скетче. Схема подключения датчика не меняется, а скачать библиотеку DallasTemperature.h для Ардуино можно на нашем сайте здесь.

Скетч для датчика ds18b20 Ардуино

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчика (A1)
DallasTemperature ds(&oneWire);

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20
}

void loop() {
  ds.requestTemperatures();                       // считываем температуру с датчика
  
  Serial.print(ds.getTempCByIndex(0));   // выводим температуру на монитор
  Serial.println("C");
}

Скетч для нескольких датчиков на одной шине

Подключите несколько термодатчиков DS18B20 к микроконтроллеру согласно схеме, и загрузите скетч для датчика температуры ds18b20 к Arduino UNO.

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(15);  // порт подключения датчиков (A1)
DallasTemperature ds(&oneWire);

byte num;              // количество подключенных датчиков

void setup() {
  Serial.begin(9600);   // инициализация монитора порта
  ds.begin();                 // инициализация датчика ds18b20

  num = ds.getDeviceCount();   // узнаем количество датчиков 
  Serial.print("Number: ");           // выводим полученное количество
  Serial.println(num);
}

void loop() {
// выполняем цикл столько, сколько найдено датчиков на шине
 for (byte i = 0; i < num; i++){
    Serial.print("Sensor ");
    Serial.print(i);
    Serial.print(": ");
    ds.requestTemperatures();                       // считываем температуру с датчика
    Serial.print(ds.getTempCByIndex(i));
    Serial.println("C");
  } 
Serial.println(""); 
}

Принципиальные схемы

Передатчик

Передающая часть беспроводного термометра на ATMega328p
(для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

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

Приемник

Приемная часть беспроводного термометра на Arduino Mega
(для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

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

DHT11 на Ардуино Уно

Помимо самой платы и датчика, чтобы подключить к Ардуино DHT11 в версии без обвязки, требуется предварительно подготовить следующие комплектующие:

  • макетную плату;
  • резистор — подойдет номиналом в десять кОм;
  • светодиоды.

Нумерация контактов происходит справа, если само устройство располагается «ножками» вниз:

  1. Питание (VCC).
  2. Вывод (DATA).
  3. Контакт, который не используется (NC).
  4. Заземление (GND).

Чтобы на Arduino датчик влажности корректно работал, резистор впаивается между первым и вторым контактом.

Когда речь идет о уже готовом модуле для Ардуино, подключается  он значительно проще:

  • VCC присоединяется к +5 В. Рекомендуется использовать питание именно в 5 В, так как в этом случае датчик можно расположить на расстоянии в двадцать метров от источника. Если питание минимально — то есть равно 3.3 В, длина кабеля не может превышать метра или же измерения окажутся некорректными;
  • отмеченный GND — к земле;
  • третий присоединяется к свободному пину, имеющемуся на плате, а номер пина указывается в скетче. Он необходим для обеспечения связи с микроконтроллером.

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

Предпочтительным вариантом подключения одиннадцатой версии или DHT22 к Arduino является второй пин — в этом случае программирование будет осуществляться по приведенному скетчу. Изменение пина требует внесения определенных правок в код.

Видеоинструкция

Внимание!

Работа с высоким напряжением опасна для вашего здоровья и жизни.
На плате существуют области, прикосновение к которым приведёт к поражению электрическим током. Это винты контактных колодок и места пайки выводов контактных колодок и реле. Не работайте с платой, если она подключена к бытовой сети. Для готового устройства используйте изолированный корпус.

Если вы сомневаетесь как подключить к реле электроприбор, работающий от общей сети 220 В и у вас есть сомнения, вопросы на тему того как это делается, остановитесь: вы можете устроить пожар или убить себя. Убедитесь, что у вас в голове — кристальное понимание принципа работы устройства и опасностей, которые связаны с высоким напряжением.

Код программы

После того как вы собрали тестовый стенд для испытаний датчика, вам потребуется скачать библиотеку DHT11 и подключить к среде разработки Arduino IDE, скачать библиотеку можно по этой ссылке. Как установить библиотеку, мы уже рассказывали в статье Установка и подключение библиотек.

Далее нужно загрузить скетч (см. ниже) через Arduino IDE на плату, и тогда мы уже сможем считывать показания датчиков и получим температуру и влажность окружающей среды. Т.е., подключив Ардуино к компьютеру и выбрав вашу плату и порт, заливаем скетч:

#include <dht11.h>

dht11 DHT;
//Вывод данных DHT11 подключен к ноге 4
#define DHT11_PIN 4

void setup()
{
Serial.begin(9600); //Запускаем отладочный порт
int check; 
Serial.print("DHT11 STATUS – \t"); //Состояние датчика
check = DHT.read(DHT11_PIN); //запрашиваем состояние
//Выводим результат
switch (check) 
{
case DHTLIB_OK: //Датчик готов к работе
Serial.print("OK\n");
break;
case DHTLIB_ERROR_CHECKSUM: //Ошибка контрольной суммы - проверить контакт
Serial.print("Checksum error\n");
break;
case DHTLIB_ERROR_TIMEOUT: //Превышено премя ожидания
Serial.print("Timeout error\n");
break;
default: //Библиотека не может подключиться к датчику по неизвестной причине
Serial.print("Unknown error\n");
break;
}
}

void loop()
{
//Вывод температуры и влажности 
Serial.print("Humidity is ");
Serial.print(DHT.humidity,1); //Влажность
Serial.print("\n");
Serial.println("Temperature is "); 
Serial.println(DHT.temperature,1); //Температура

delay(1000); // Опрос раз в секунду
}

После того как вы залили скетч, открываем последовательный монитор порта и смотрим показания датчика.

Подышав на датчик, можно отследить изменения показаний. В этом случае уровень влажности должен увеличиться. А если приложить к датчику что-нибудь горячее, температура тоже поползет вверх.

Характеристики датчиков

Остановимся на основных характеристиках обоих датчиков.

DHT11

  • Питание от 3 до 5В.
  • Максимально потребляемый ток – 2.5мА при преобразовании (при запросе данных).
  • Рассчитан на измерение уровня влажности в диапазоне от 20% до 80%. При этом точность измерений находится в диапазоне 5%.
  • Измеряет температуру в диапазоне от 0 до 50 градусов с точностью плюс-минус 2%.
  • Частота измерений не более 1 Гц (одно измерение в секунду).
  • Размер корпуса: 15.5 мм x 12 мм x 5.5 мм.
  • 4 коннектора. Расстояние между соседними – 0.1″.

DHT22

  • Питание от 3 до 5В.
  • Максимально потребляемый ток – 2.5мА при преобразовании (при запросе данных).
  • Рассчитан на измерение уровня влажности в диапазоне от 0% до 100%. При этом точность измерений находится в диапазоне 2%-5%.
  • Измеряет температуру в диапазоне от -40 до 125 градусов с точностью плюс-минус 0.5 градусов по Цельсию.
  • Частота измерений до 0.5 Гц (одно измерение за 2 секунды).
  • Размер корпуса: 15.1 мм x 25 мм x 7.7 мм.
  • 4 коннектора. Расстояние между соседними – 0.1″.

DHT22 более точный и имеет больший диапазон измеряемых значений.

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

Датчик температуры DS18B20

Данный прибор направлен на измерение уровня температуры  заданного объекта или среды. Температура, с которой может работать термодатчик составляет от -55 до +125 градусов Цельсия.

КАК ИЗМЕРИТЬ ТЕМПЕРАТУРУ И ВЛАЖНОСТЬ. ДАТЧИКИ DHT11 И DHT22 [Уроки Ардуино #13]КАК ИЗМЕРИТЬ ТЕМПЕРАТУРУ И ВЛАЖНОСТЬ. ДАТЧИКИ DHT11 И DHT22 [Уроки Ардуино #13]

Датчик температуры DS18B20 преобразует полученные данные в числовой код (9-12 бит) и передает их в головную систему с помощью протокола 1-Wire.

Существует возможность подключения к одной шине сразу нескольких датчиков, что позволяет увеличить охват измеряемой области. А уникальное имя каждого датчика позволит не перепутать их и вовремя определить точное место сигнала.

Время сбора данных при максимальном разрешении составляет 750 мс.

Особенностью является то, что DS18B20 может получать питание непосредственно с линии данных, что делает подключение датчика температуры к электрическое сети необязательным. Паразитная емкость — название, которое носит данный процесс. Термодатчики такого типа, несомненно, подключаются и проводным способом, но иногда предпочтительнее беспроводной вариант.

Рекомендуем купить

Подключение датчика DHT11, DHT22/AM2302 к плате ESP8266 NodeMCU

Подключить датчик DHT11/DHT22/AM2302 к ESP8266 NodeMCU довольно просто. Начните с установки NodeMCU на макетную плату, чтобы каждая сторона платы NodeMCU была на отдельной стороне макетной платы.

Теперь установите датчик на макетную плату, в стороне от NodeMCU. Подключите вывод VCC датчика к выводу 3,3V на NodeMCU и соедините выводы земли датчика и платы. Также подключите вывод данных датчика к выводу D8 платы ESP8266 NodeMCU. Наконец, нам нужно установить подтягивающий резистор 10 кОм между линией VCC и линией данных, чтобы на ней поддерживался высокий логический уровень для корректной связи между датчиком и NodeMCU. Если у вас датчик установлен на отдельную плату, возможно, вам не нужно добавлять какие-либо внешние подтягивающие резисторы. В этом случае датчик поставляется уже со встроенным подтягивающим резистором.

Когда вы закончите, у вас должно получиться что-то похожее на рисунок ниже.

Рисунок 1 – Подключение DHT11, датчика температуры и влажности, к ESP8266 NodeMCUРисунок 2 – Подключение DHT22, датчика температуры и влажности, к ESP8266 NodeMCU

Распиновка датчика влажности почвы

Датчик влажности почвы очень прост в использовании и содержит только 4 вывода для связи с внешним миром.

Рисунок 5 – Распиновка датчика влажности почвы

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

Вывод DO (цифровой выход) выдает цифровой выходной сигнал со схемы встроенного компаратора. Вы можете подключить его к любому цифровому выводу на Arduino или напрямую к 5-вольтовому реле или подобному устройству.

Вывод VCC подает питание на датчик. Рекомендуется питать датчик напряжением от 3,3 до 5 В

Обратите внимание, что сигнал на аналоговом выходе будет зависеть от того, какое напряжение питания подается на датчик

GND для подключения земли.

Сравнение датчиков DHT11, DHT22 и DHT21

На сегодняшний день существует множество датчиков и модулей, которые можно использовать для измерения температуры и прочих показателей, связанных с  поддержанием оптимальной жизнедеятельности человека, а также других вещей и организмов.

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

Датчики семейства DHT являются самыми популярными в кругу ардуинщиков. Важными критериями здесь являются простота в использовании и написании программного кода, да и относительно недорогая стоимость.

В семействе DHT выделяют три самых распространенных датчика: DHT11, DHT22 и DHT21.

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

Подключаются данные модули очень просто – с помощью трех контактов (два из которых отвечают за питание, а третий подключается к цифровому выходу на плате).

Сразу возникает вопрос: а какой датчик лучше применять?  Ведь они различаются по своим характеристикам и ценам. Как выбрать необходимый модуль именно для вашего проекта и с правильным соотношением “цена-качество”? Давайте разбираться. Начнем с небольшого обзора.

DHT21 имеет несколько другой вид.

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

Теперь  сравним модули по основным показателям.

Датчик DHT11:

  • определение влажности в диапозоне 20-80% с точностью ±5% RH
  • определение температуры от 0°C до +50°C с точностью ±2 °C
  • частота опроса 1 раз в секунду

Датчик DHT22:

  • определение влажности в диапазоне 0-100% с точностью ±2% RH
  • определение температуры от -40°C до +125°C с точностью ±0.5℃
  • частота опроса 1 раз в 2 секунды

Датчик DHT21:

  • определение влажности в диапазоне 0-100% с точностью ±2% RH
  • определение температуры от -40°C до +80°C с точностью  ±0.5°C

Сравнивая цены на данные модули, можно сразу выделить низкую цену на датчик DHT11. Стоит он, как правило, в районе 100-200 рублей – это связано с высоким спросом на данные модули и с их простым устройством.

DHT21 и DHT22 на фоне первого легко можно отнести к более дорогим: цена на них обычно колеблется в районе 300-400 рублей (то есть в 2-3 раза дороже).

Связано это с большей точностью показаний, большим диапазоном в измерении температур, к тому же у датчика DHT22 есть защитный корпус, который предохраняет его от загрязнения и влаги, что тоже играет весомую роль в составлении цены.

Как подключить DHT11 DHT22 к ардуино и вывести через I2C дисплей 16х2Как подключить DHT11 DHT22 к ардуино и вывести через I2C дисплей 16х2

В связи с этим стоит подумать, а так ли вам надо переплачивать за защитный корпус, если применение вашего датчика ограничивается, к примеру, лишь комнатой?

Наиболее оптимальным датчиком для домашней метеостанции будет DHT11, поскольку он дешевле, занимает меньше места, надежен и прост в эксплуатации и не требует от создателя измерять рекордно низкие или высокие температуры, поддерживая стабильность на протяжении долгого времени.

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

Надеемся, что статья была полезной и помогла вам в выборе необходимого модуля в управлении климатом. Удачной всем компиляции и следите за нашим блогом!

DHT22 и Arduino – схема подключенияПодключение кнопки к Arduino

Схема проекта

Схема бесконтактного термометра на основе платы Arduino и датчике температуры MLX90614 представлена на следующем рисунке.

Схема была нарисована с использованием программы Fritzing. Поскольку эта программа не поддерживает датчик MLX90614, мы вместо него на схеме использовали соответствующим образом подписанный прямоугольник, также на схеме мы использовали светодиод красного цвета вместо лазерного диода. Вся схема запитывается от батарейки 9V через кнопку. При нажатии кнопки контакт батарейки подключается к контакту RAW платы Arduino. Это напряжение 9V с помощью встроенного регулятора напряжения платы Arduino преобразуется в стабилизированное напряжение 5V, которое используется для питания OLED дисплея, датчика температуры и лазерного диода.

Если вы будете использовать этот термометр только для измерения температуры человеческого тела или других достаточно крупных объектов, то лазерный диод (он облегчает прицеливание термометра на маленьких объектах) можно из его схемы исключить.

Внешний вид конструкции нашего бесконтактного термометра показан на следующем рисунке.

PHP и веб-сервер

Все настройки веб-интерфейса хранятся в . Измените его в соответствии с вашими настройками базы данных.

Задайте свой часовой пояс в формате PHP

Все доступные часовые пояса описаны здесь.

Задайте свой секретный ключ для доступа (в виде числа) который должен совпадать с константой из скетча

В нашем веб-сервере нет авторизации, входа по паролю, это усложнило бы всю конструкцию. Для прототипа это не нужно. Поэтому вся защита построена на файле , отсутствии и на этом секретном ключе для доступа.

Основной PHP скрипт принимает простой HTTP GET запрос с данными и сохраняет их в соответствующие таблицы базы данных. Если ключ не совпадает, то запрос будет отвергнут.

Скрипт используется для просмотра таблиц данных и содержит гиперссылки на остальные скрипты веб-интерфейса. Вызывайте его так

Например

выводит простые таблички, где надо помнить, что :

  • датчик с id 11 это домашний датчик на сервере,
  • датчик с id 20 это заоконный датчик.

Скрипт содержит функции, общие для всех PHP скриптов.

Скрипт отвечает за рисование графиков при помощи Google Charts. Вот, например, график питающего напряжения заоконного датчика. Напряжение повышается в солнечный день за счёт солнечной же батареи и затем блок питания на аккумуляторах постепенно разряжается.

экспортирует данные из таблиц базы данных MySQL в файл формата CSV. Для дальнейшего импорта и анализа в электронных таблицах.

экспортирует данные о напряжении питания заоконного датчика из базы данных MySQL в файл формата CSV. Полезно для отладки.

очищает все таблицы, т.е. удаляет все наши данные. Полезно для отладки. На этот скрипт нет ссылок из , поэтому вызывать его надо по прямой ссылке в адресной строке браузера с указанием .

При приёме данных повсеместно используется функция для предотвращения попадания в БД некорректных значений.

В корень вашего сайта не забудьте положить для предотвращения попадания в поисковые системы.

ESP8266, WiFi и передача данных

И вот теперь возвращаемся к скетчу , к той его части, которая соединяется с точкой доступа WiFi и отсылает данные на веб-сервер.

Как я уже писал, мне не удалось найти нормальную библиотеку для Arduino для управления модулем ESP8266 с помощью AT команд, пришлось «колхозить» самому. Напомню так же, что вам придется прошить в ESP8266-01 прошивку определённой версии. И теперь когда всё готово, разберём как это работает.

Для доступа к веб серверу в скетче необходимо изменить вот эти константы

В в функции сначала производится переключение ESP8266 в режим Station, т.е. он начинает работать как WiFi клиент

и далее следует подключение к точке доступа

Если подключения не происходит, то попытка повторяется (однократно)

Затем выбирается режим одиночного подключения TCP/IP

При отсылке данных от датчиков типа DHT на вебсервер используется функция с указанием типа данных как

При отсылке данных от датчиков типа BMP на вебсервер используется та же функция с указанием типа данных как

На вход функция принимает строку HTTP GET запроса и отправляет её по назначению на веб-сервер.

Внутри себя проверяет доступность ESP модуля, посылая ему команду «AT», далее проверяется подключение к WiFi и производится переподключение, если необходимо. Затем отправляются данные и соединение TCP закрывается.

Android приложение

В наше время, когда уже каждый может мигать светодиодом, никакой метеостанцией никого не удивишь. Но если поделка умеет связываться с сервером через WiFi, имеет веб-морду и мобильное приложение, то это уже кое-что! Под сервером здесь имеется в виду конечно же сервер приложений, т.е. в нашем случае это PHP-обвязка и СУБД MySQL. Не достаёт вишенки на торте, а именно приложения под Android написанием которого мы сейчас и займёмся.

Схемы подключения датчика давления жидкости

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

Элемент Наименование/характеристики Количество
Микроконтроллер Arduino Nano/Uno или любой клон 1
Экран Display 2×16 ST7032 1
Датчик MS5803 1
Резистор 10 кОм 2
Конденсатор 0.1 мкФ 1
Кнопка Любая, без фиксации нажатия 1

Библиотека работы с датчиком давления берется здесь: https://github.com/millerlp/MS5803_05

С экраном тут: https://yadi.sk/d/KKJwJ1VtDx9PCw

Принципиальная схема

Кнопка нужна для выбора режима отображения — однократное нажатие переключает вывод абсолютных и относительных данных, с сохранением состояния на последующих опросах датчика.

Скетч для работы с датчиками DHT11 и DHT22 в Arduino

#include "DHT.h"
#define DHTPIN 2 // Тот самый номер пина, о котором упоминалось выше
// Одна из следующих строк закоментирована. Снимите комментарий, если подключаете датчик DHT11 к arduino
DHT dht(DHTPIN, DHT22); //Инициация датчика
//DHT dht(DHTPIN, DHT11);
void setup() {
  Serial.begin(9600);
  dht.begin();
}
void loop() {
  delay(2000); // 2 секунды задержки
  float h = dht.readHumidity(); //Измеряем влажность
  float t = dht.readTemperature(); //Измеряем температуру
  if (isnan(h) || isnan(t)) {  // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
    Serial.println("Ошибка считывания");
    return;
  }
  Serial.print("Влажность: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Температура: ");
  Serial.print(t);
  Serial.println(" *C "); //Вывод показателей на экран
}

После загрузки скетча и подключения датчика, результат измерений можно посмотреть в окне монитора порта. Там будут выводиться значения температуры и влажности. Если что-то пошло не так, проверьте правильность подключения датчика, соответствие номера порта на плате Arduino и в скетче, надежность контактов.
Если все работает и датчик дает показания, можете провести эксперименты. Например, поместить датчик в более холодное место или подышать на него, отслеживая при этом изменения . Если при запотевании уровень влажности увеличивается, значит датчик работает исправно. Подуйте на него тонкой струйкой – влажность уменьшится и температура вернется в норму.

На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.

Характеристики модуля KY-001.

Модуль датчика температуры KY-001 состоит из цифрового датчика температуры DS18B20, светодиода и резистора. Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.

  • Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V.
  • Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F.
  • В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C.
  • Время измерения не более 750 миллисекунд.

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

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino NANO.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND соответственно. Подключите сигнал (S) к контакту 2 на Arduino.

Подключение (слева направо)

  • GND
  • +5V
  • S — Signal, в примере подключаем ко 2 выводу arduino

Скетч вывода температуры с модуля KY-001 (DS18B20) в монитор порта.

Код ниже будет выводить показания температуры с модуля KY-001 (DS18B20) в монитор последовательного порта каждую секунду.

#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data;
    byte addr;
    float celsius;
    // поиск датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // измерение температуры
    delay(1000);
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // начало чтения измеренной температуры
    //показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data = ds.read();
    }
    int16_t raw = (data << 8) | data;
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
    // преобразование показаний в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);
}

Вот такой результат мы увидим в мониторе порта.

Данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature.h. Данная библиотека ставится поверх OneWire.h, т.е. для ее работы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример, который я взял из библиотеки, и немного его упростил.

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void){
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

В данном примере температура выводится 1 раз в секунду, и при этом выводится температура в Цельсиях и Фаренгейтах в монитор последовательного порта.

Как видите, данный пример намного меньше и более понятен для новичка.

KY-001датчик температуры DS18B20 к ArduinoKY-001

Купить модуль KY-001 можно тут:

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-001 модуль температуры на базе DS18B20. Подключение Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Модуль KY-001 датчика температуры DS18B20.pdf 82 Kb 39 Скачать
Скетч вывода температуры с модуля KY-001 .ino 1 Kb 39 Скачать
Код с использованием бмблиотеки DallasTemperature.h.ino 1 Kb 40 Скачать
Библиотека DallasTemperature .zip 31 Kb 47 Скачать

Код Arduino. Вывод значений на монитор последовательного порта

Как обсуждалось ранее, датчики DHT11 и DHT22/AM2302 имеют собственный однопроводный протокол, используемый для передачи данных. Этот протокол требует точной синхронизации. К счастью, нам не нужно беспокоиться об этом, потому что мы собираемся использовать библиотеку DHT, которая позаботится почти обо всем.

Сначала скачайте библиотеку, посетив репозиторий на GitHub, или просто нажмите эту кнопку, чтобы скачать архив:

Чтобы установить библиотеку, откройте Arduino IDE, перейдите в «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку» и выберите только что загруженный zip-архив DHTlib.

После установки библиотеки вы можете скопировать следующий скетч в IDE Arduino. Данный скетч выводит значения температуры и относительной влажности в монитор последовательного порта. Попробуйте скетч в работе; а затем мы рассмотрим его подробнее.

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

В функции нам нужно инициировать интерфейс последовательной связи, так как для вывода результатов мы будем использовать монитор последовательного порта.

В функции мы будем использовать функцию , которая считывает данные с DHT22/AM2302. В качестве параметра она принимает номер вывода данных датчика. Если вы работаете с DHT11, вам нужно использовать функцию . Вы можете сделать это, раскомментировав вторую строку.

После расчета значений влажности и температуры мы можем получить к ним доступ:

Объект возвращает значение температуры в градусах Цельсия (°C). Его можно преобразовать в градусы Фаренгейта (°F) по простой формуле:

\[T_{^\circ F} = T_{^\circ C} \times 9/5 +32\]

В конце мы выводим значения температуры и влажности в монитор последовательного порта.

Рисунок 8 – Вывод в мониторе последовательного порта показаний датчика DHT11 или DHT22/AM2302

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий