Ардуино термометр на основе датчика температуры ds18b20

Схема соединения

Сделайте соединения согласно приведенной ниже схеме.

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

  • VCC -> Arduino 5V, плюс резистор 4,7K, идущий от VCC к Data
  • Data -> Пин 7 Arduino
  • GND -> GND Arduino

Соединения для ЖК-дисплея и Arduino UNO

  • Пин 1 -> GND
  • Пин 2 -> VCC
  • Пин 3 -> Arduino Пин 3
  • Пин 4 -> Arduino Пин 33
  • Пин 5 -> GND
  • Пин 6 -> Arduino Пин 31
  • Пин 7-10 -> GND
  • Пин 11 -> Arduino Пин 22
  • Пин 12 -> Arduino Пин 24
  • Пин 13 -> Arduino Пин 26
  • Пин 14 -> Arduino Пин 28
  • Пин 15 -> VCC через резистор 220 Ом
  • Пин 16 -> GND

Подключите потенциометр, как показано выше, к контакту 3 на ЖК-дисплее, для управления контрастностью.

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

Доработка скетча Ардуино

Поигравшись с конденсаторами, решил проверить программное обеспечение устройства на наличие неоптимального кода, который мог бы приводить к зависаниям микроконтроллера. Первым делом начал с проверки процедуры DoAll(), которая управляет включением и отключением реле. И тут меня как осенило, откуда берутся просадки напряжения.

Дело в том, что после обработки данных, полученных с датчиков, и включении/выключении какого-либо реле, происходил мгновенный переход к следующей обработке данных с датчиков, и включение/выключение следующего реле, и так далее. Фактически, все реле действительно могли включаться или отключаться одновременно, с задержкой менее 1 мсек, поскольку между обработкой данных для каждого реле отсутствовала пауза.

Исправив код этой процедуры, а именно, добавив искусственную задержку в 200 миллисекунд после включения/отключения какого-либо реле, я был крайне удивлен стабильной работой прибора. Зависания вовсе прекратились, и вот уже 2 месяца прибор работает стабильно. Теперь и WatchDog не нужен, хотя конечно он не помешает, на всякий случай.

В итоге можно сказать, что причиной зависания являлась несбалансированность нагрузки на источник питания при выполнении программного кода, а также низкое качество источника питания. Исправив программу, исчез и дисбаланс. Ниже представлен исправленный фрагмент кода процедуры DoAll(). Жирным текстом выделены те самые задержки по 200 мсек, которые были добавлены в программу и кардинально повысили стабильность работы микроконтроллера.

void DoAll(){
  //включаем обогрев, разъем 3, дистанционная розетка
  //сделаем чтобы батарея также включалась при повышенной влажности, чтобы подсушивать воздух
  if (HeatState==0 && (t<=tempHeatOn || h>humVentOn)){
    digitalWrite(4,1);
    digitalWrite(14,HIGH);
    HeatState=1;
    delay(200);
  }
  //отключаем обогрев, когда температура пришла в норму, а также влажность не превышает верхний предел (порог включения вытяжки)
  if (t>=tempHeatOff && HeatState==1 && h<=humVentOn){
    digitalWrite(4,0);
    digitalWrite(14,LOW);
    HeatState=0;
    delay(200);
  }

  //включаем вентиляцию, замыкаем разъемы 1 и 2 (реле 1 и 2)
  //также включаем вытяжку, если температура превышает верхнее значение 
  //(т>температуры отключения обогрева, например если перегрели во время просушки, 
  //то вытяжка продолжит работать когда влажность уже в норме, но температура воздуха еще высокая)
  if (VentState==0 && (h>=humVentOn || t>tempHeatOff)){
    digitalWrite(9,1);
    digitalWrite(2,1);
    digitalWrite(15,HIGH);
    VentState=1;
    delay(200);
  }
  //отключаем вентиляцию, когда влажность и температура пришли в норму
  if (h<=humVentOff && VentState==1 && t<=tempHeatOff){
    digitalWrite(9,0);
    digitalWrite(2,0);
    digitalWrite(15,LOW);
    VentState=0;
    delay(200);
  }

}

Обновлено 02.02.2019

Скетч arduino для модуля управления микроклиматом v2.3

1 файл(ы) 20 kb

Обновлено 19.11.2019

Многие спрашивают схему для сборки этого прибора, поэтому предлагаю вашему вниманию новый, более совершенный и интересный проект, созданный на базе этого, в котором есть схема, и подробно расписан весь процесс сборки, наладки и пуска системы! Читаем здесь

Спасибо за внимание! Будут вопросы — обращайтесь!

P.S. Планирую установить приточный клапан в ванной комнате, который позволит быстрее нормализовать влажность и температуру за счет поступления воздуха с улицы. Четвертый разъем системы предусмотрен именно для этих целей. Когда появится клапан, выложу обновления скетча для арудино.

Шаг 4. Код (скетч)

Загружаем код в Arduino UNO через Ethernet-кабель после ввода кода в программном обеспечении Arduino после выбора платы — Arduino / Genuino UNO и программера — Arduino ISP.

В начале подключаем библиотеку LiquidCrystal.

Код можно скачать или скопировать ниже:

#include <LiquidCrystal.h>

LiquidCrystal lcd(7,6,5,4,3,2);

const int Sensor = A0; 
byte degree_symbol = 
              {
                0b00111,
                0b00101,
                0b00111,
                0b00000,
                0b00000,
                0b00000,
                0b00000,
                0b00000
              };
void setup()
{
  pinMode(Sensor, INPUT);
  lcd.begin(16,2);
  lcd.createChar(1, degree_symbol);
  lcd.setCursor(0,0);
  lcd.print("    Digital    ");
  lcd.setCursor(0,1);
  lcd.print("  Thermometer   ");
  delay(4000);
  lcd.clear();
}
void loop()
{
  
     float temp_reading=analogRead(Sensor);
     float temperature=temp_reading*(5.0/1023.0)*100;
     delay(10); 
  
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temperature in C");
    lcd.setCursor(4,1);
    lcd.print(temperature);
    lcd.write(1);
    lcd.print("C");
    delay(1000);
}

Как подключить DHT11 к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль DHT11;
  • макетная плата;
  • 2 светодиода и 2 резистора на 220 Ом;
  • провода «папа-папа» и «папа-мама».

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

Схема. Датчик DHT11 подключение к Ардуино

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

#include <DHT.h>      // подключаем библиотеку для датчика
DHT dht(2, DHT11);  // сообщаем на каком порту будет датчик

void setup() {
   dht.begin();                // запускаем датчик DHT11
   Serial.begin(9600);   // подключаем монитор порта
}

void loop() {
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();

   // выводим температуру (t) и влажность (h) на монитор порта
   Serial.print("Humidity: ");
   Serial.println(h);
   Serial.print("Temperature: ");
   Serial.println(t);
}

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

  1. переменные «h» и «t» являются типом данных float, которая служит для хранения чисел с десятичным разделителем (dht11 подключение к ардуино);
  2. команда выводит информацию на порт без переноса строки, команда выводит информацию на порт с переносом строки.

Скетч DHT11 и дисплея LCD 1602 Arduino

#include <Wire.h>                       // библиотека для протокола I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h>                         // подключаем библиотеку для датчика

LiquidCrystal_I2C LCD(0x27,16,2);  // присваиваем имя LCD для дисплея
DHT dht(2, DHT11);                          // сообщаем на каком порту будет датчик

void setup() {
   LCD.init();            // инициализация LCD дисплея
   LCD.backlight();  // включение подсветки дисплея
   dht.begin();         // запускаем датчик DHT11
}

void loop() {
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();

   // выводим температуру (t) и влажность (h) на жк дисплей
   LCD.setCursor(0,0);
   LCD.print("Humidity: ");
   LCD.print(h);

   LCD.setCursor(0,1);
   LCD.print("Temperature: ");
   LCD.print(t);

   delay(1000);
   LCD.clear();
}

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

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

Libraries

The Arduino environment can be extended through the use of libraries, just like most programming platforms. Libraries provide extra functionality for use in sketches, e.g. working with hardware or manipulating data. To use a library in a sketch, select it from Sketch > Import Library. A number of libraries come installed with the IDE, but you can also download or create your own. See these instructions for details on installing libraries. There’s also a tutorial on writing your own libraries. See the API Style Guide for information on making a good Arduino-style API for your library.

Standard Libraries

  • EEPROM — reading and writing to «permanent» storage
  • Ethernet — for connecting to the internet using the Arduino Ethernet Shield, Arduino Ethernet Shield 2 and Arduino Leonardo ETH
  • Firmata — for communicating with applications on the computer using a standard serial protocol.
  • GSM — for connecting to a GSM/GRPS network with the GSM shield.
  • LiquidCrystal — for controlling liquid crystal displays (LCDs)
  • SD — for reading and writing SD cards
  • Servo — for controlling servo motors
  • SPI — for communicating with devices using the Serial Peripheral Interface (SPI) Bus
  • Stepper — for controlling stepper motors
  • TFT — for drawing text , images, and shapes on the Arduino TFT screen
  • WiFi — for connecting to the internet using the Arduino WiFi shield
  • Wire — Two Wire Interface (TWI/I2C) for sending and receiving data over a net of devices or sensors.

The Matrix and Sprite libraries are no longer part of the core distribution.

101 Only Libraries

  • CurieBLE — Interact with smartphones and tablets with Bluetooth Low Energy (BLE).
  • CurieIMU — Manage the on-board accelerometer and gyro.
  • CurieTimerOne — Allows to use Timer functions.
  • CurieTime — Allows to control and use the internal RTC (Real Time Clock)

Due, Zero and MKR1000 Libraries

  • USBHost — Communicate with USB peripherals like mice and keyboards.
  • Scheduler — Manage multiple non-blocking tasks.

Zero and all the SAMD21 based MKR boards libraries

  • AudioFrequencyMeter — Sample an audio signal and get its frequency back
  • AudioZero — Play audio files from a SD card
  • RTC — Real Time Clock to schedule events
  • ArduinoSound — A simple way to play and analyze audio data
  • I2S — To use the I2S protocol on SAMD21

Arduino Nano 33 IoT and UNO WiFi Rev. 2

ArduinoLSM6DS3 — library to use the LSM6DS3 6 axis IMU available on the Arduino Nano 33 IoT and the Arduino UNO WiFi Rev. 2.

Arduino Nano 33 BLE and BLE Sense

ArduinoLSM9DS1 — library to use the LSM9DS1 9 axis IMU available on the Arduino Nano 33 BLE and the Arduino Nano 33 BLE Sense.

Arduino Nano 33 BLE Sense

  • PDM — library to use the digital microphone MP34DT05, our library PDM can be used also with our ArduinoSound library.
  • ArduinoAPDS9960 — library to use the gesture sensor APDS9960; it senses gesture, color, ambience illumination and proximity.
  • ArduinoLPS22HB — library to use the barometer and temperature sensor LPS22; it is an ultra-compact sensor which functions as a digital output barometer.
  • ArduinoHTS221 — library to use the relative humidity sensor HTS221; it is an ultra-compact sensor that uses a polymer dielectric planar capacitor structure capable of detecting relative humidity variations, returned as digital output on a serial interface.

MKR RGB Shield Libraries

  • ArduinoMKRRGB — library to be used with the Arduino MKR RGB Shield
  • ArduinoGraphics — library with graphic primitives, works also with the MKR RGB Shield

Yún devices Library

  • Bridge Library — Enables communication between the Linux processor and the microcontroller on the Yún.
  • Ciao Library — Aims to simplify interaction between microcontroller and Linino OS allowing a variety of connections with most common protocols

Contributed Libraries

If you’re using one of these libraries, you need to install it first. See these instructions for details on installation. There’s also a tutorial on writing your own libraries.

Communication (networking and protocols):

  • X10 — Sending X10 signals over AC power lines

Sensing:

Displays and LEDs:

Audio and Waveforms:

Motors and PWM:

TLC5940 — 16 channel 12 bit PWM controller.

Timing:

Utilities:

Подключение нескольких датчиковoв DS18B20+

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

Запускаем среду программирования IDE Arduino, копируем пример кода в в окно программы и загружаем в контроллер.

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.
*/

#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature

#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена DQ

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
Serial.begin(9600); // Задаем скорость передачи данных
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит
}

void loop(void)
{
Serial.print(» Reading Temperature…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Read»);
Serial.print(» Sensor Temperature 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
Serial.print(» Reading Temperature…»);
Serial.println(«Read»);
Serial.print(» Sensor Temperature 2: «);
Serial.print(sensors.getTempCByIndex(1)); // Отображение температуры датчика 2
}

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

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.

*/

 
 
#include <OneWire.h>                        // Подключаем библиотеку OneWire
#include <DallasTemperature.h>              // Подключаем библиотеку DallasTempature
 
#define ONE_WIRE_BUS 2                      // Указываем, к какому выводу подключена DQ
 

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

voidsetup(void)

{

Serial.begin(9600);// Задаем скорость передачи данных

sensors.begin();// Запуск библиотеки, по умолчанию 9 бит

}

voidloop(void)

{

Serial.print(» Reading Temperature…»);

sensors.requestTemperatures();// Запрос на считывание температуры

Serial.println(«Read»);

Serial.print(» Sensor Temperature 1: «);

Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1

Serial.print(» Reading Temperature…»);

Serial.println(«Read»);

Serial.print(» Sensor Temperature 2: «);

Serial.print(sensors.getTempCByIndex(1));// Отображение температуры датчика 2

}

Ссылки  Документация к DS18B20+  Скачать библиотеку DallasTemperature  Скачать библиотеку OneWire v.2.2

Купить на Aliexpress  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  Датчик температуры DS18b20

Купить в Самаре и области  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  Датчик температуры DS18b20

Получение данных

Рассмотрим данные, полученные от DHT11.

00100101 00000000 00011001 00000000 00111110.

Эти данные можно разделить на основе указанной выше структуры следующим образом:

Чтобы проверить правильность полученных данных, нам нужно выполнить небольшой расчет. Добавьте все значения интегральных и десятичных значений RH и температуры и проверьте, равна ли сумма величине контрольной суммы, т. е. последним 8-битным данным:

00100101 + 00000000 + 00011001 + 00000000 = 00111110

Это значение совпадает с контрольной суммой и, следовательно, полученные данные действительны. Теперь, чтобы получить значения RH и температуры, просто преобразуйте двоичные данные в десятичные данные:

  • RH = Десятичное значение 00100101 = 37%
  • Температура = Десятичное значение 00011001 = 25C

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

Виды датчиков

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

Рассмотрим основные виды приборов, построенных на рассматриваемой платформе:

  1. Вращательный: в основном, резистор, подключенный к потенциометру и трехконтактному разъему, который позволяет подключать аналоговый выход и подавать его VCC и GND. Часто используется для определения положения двигателя, как сервомотора, так и шагового, постоянного тока и других. По-другому можно назвать – Ардуино датчик тока или Аrduino датчик движения.
  2. Звуковой: оснащен микрофоном, операционным усилителем LM386 и потенциометром, позволяющим захватывать любой звук вокруг него и превращать его в аналоговый сигнал с 0V до VCC, который может быть преобразован в сигнал Аrduino от 0 до 1024 в резолюции ADC. Существуют различные приложения для такого типа, которые относятся к аудиозахвату. Также существует ультразвуковой датчик Ардуино.
  3. Обнаружитель дыма: используется в системах обнаружения пожара, является прибором, который выявляет дым и газ, может быть откалиброван с помощью потенциометра, а выходной сигнал подключается к аналоговому входному модулю. Эти Ардуино-датчики имеют, помимо прочего, варианты MQ-2, MQ-3, MQ4 и дифференцируются по типу обнаруженного вещества, метана, спирта, пропана и другие.
  4. Детонация: предназначен для обнаружения сбоев или известен, как перкуссионный. Передает цифровой сигнал, когда обнаруживает изменение. Может быть подключен к цифровому входу на плате разработки Arduino и обнаруживать сигнал, который генерируется при наличии какого-либо удара.
  5. Ардуино-датчик температуры: предназначается для измерения состояния окружающей среды. К таким можно отнести Аrduino dsl8b20.

Просадка напряжения

Пытаясь найти объективную причину зависания, я стал грешить на некачественный блок питания и просадку напряжения при включении реле, особенно когда несколько реле включаются одновременно, ведь зависания происходили не так часто, а всего лишь 1-2 раза в месяц.

Первым делом решил добавить 2 конденсатора по 1000 мкф в надежде, что они уменьшат просадку напряжения при срабатывании реле. Первый поставил параллельно выходу с блока питания (там кстати уже был свой конденсатор, но второй лишним не будет, подумал я), а второй — установил параллельно выходу +5V на плате ардуино, откуда как раз берется питание для реле. С этого же выхода питается и сам микроконтроллер. Складывается логичная ситуация — когда все реле включаются одновременно, микроконтроллеру не хватает напряжения и он зависает.

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

Дополнительные сенсоры

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

  1. Датчик температуры + влажности. Вы можете использовать этот совместимый с Arduino гаджет для контроля температуры окружающей среды или влажности. В качестве основного проекта вы можете подключить ЖК-дисплей к Arduino и отображать температуру в помещении/влажность.
  2. Датчик инфракрасного излучения, также называемый «инфракрасным излучающим диодом». Он работает с 38KHz модулирующим сигналом. Можно использовать для отправки кода в другой Arduino или для управления телевизором.
  3. Фоторезистор. Сопротивление компонента будет варьироваться в зависимости от интенсивности света, которому он подвергается. Является резистором, сопротивление которого падает, когда свет попадает на него.
  4. Ультразвуковой прибор расстояния автоматически отправляет аудиосигнал 40 кГц и определяет, есть ли импульсный сигнал назад. Он посылает сигнал, и если он получает обратно, то вычисляет пройденное расстояние, таким образом, расстояние от приспособления до объекта перед ним. Он может ощущать объект в диапазоне: 2 см ~ 500 см.
  5. Датчик детонации. Проще говоря, это переключатель, который включается, когда он обнаруживает стук. Существует светодиод, который также дает визуальный сигнал состояния, высокий или низкий.
  6. Звуковой будет обнаруживать окружающий звук. Это лучше всего использовать для таких проектов, как голосовые чейнджеры.
  7. Обнаружение напряжения (выше/ниже). Определяет уровень напряжения любого поставщика постоянного тока, до 25 вольт. Критические точки перенапряжения/пониженного напряжения могут быть отрегулированы.
  8. Определитель влажности и температуры. Arduino датчик влажности почвы помогает определить условия для комфортного существования комнатных и тепличных растений.

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

Устройство датчиков и схема подключения к Ардуино

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

DHT11 состоит из 3 основных компонентов. Датчик влажности резистивного типа, термистор NTC и 8-разрядный микроконтроллер, который преобразует аналоговые сигналы и отправляет одиночный цифровой сигнал.

Схема подключения DHT11 к Ардуино

Этот цифровой сигнал может быть прочитан любым микроконтроллером или микропроцессором для дальнейшего анализа.

DHT11 состоит из 4 контактов: VCC, Data Out, Not Connected (NC) и GND. Диапазон напряжения для вывода VCC составляет от 3,5 до 5,5 В. Питание 5 В будет достаточно. Данные на выводе Data Out являются последовательными цифровыми данными.

DHT11 может измерять значение влажности в диапазоне 20-90 % относительной влажности (RH) и температуру в диапазоне 0-50 С. Период выборки составляет 1 секунду.

Все DHT11 точно калибруются в лаборатории, а результаты хранятся в памяти. Между любыми микроконтроллерами, такими как Arduino и DHT11 Sensor, может быть установлена ​​однопроводная связь.

Кроме того, длина кабеля может достигать 20 метров. Данные состоят из целочисленных и десятичных частей, как для относительной влажности (RH), так и для температуры.

Данные от DHT11 и Ардуино датчиков движения состоят из 40 бит, и формат выглядит следующим образом:

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

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

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

Adblock
detector