Электрификация

Справочник домашнего мастера

Термостат на arduino

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

Мы сделаем LCD-термометр или, как вариант, Serial-термометр (напечатает данные о температуре на последовательном мониторе Arduino IDE) на основе микроконтроллера Ардуино и цифрового датчика DS18B20, макетов, перемычек. Таким образом, вы сможете измерять температуру воздуха, жидкости, например, воды и температуру земли.

Содержание

Информация о сенсоре DS18B20

DS18B20 — это цифровой температурный датчик с интерфейсом 1-Wire от Maxim IC. На выходе мы получаем информацию в Цельсиях с точностью от 9 до 12 бит, от -55 до 125 (+/- 0,5). Каждый датчик имеет уникальный 64-разрядный серийный номер, что позволяет использовать огромное количество датчиков на одной шине данных.

Особенности:

  • Для уникального интерфейса 1-Wire® требуется только один порт для связи.
  • Каждое устройство имеет уникальный 64-битный последовательный код, хранящийся в ПЗУ.
  • Многоточечная возможность упрощает использование распределенных температурных зондов.
  • Не требует внешних компонентов.
  • Может питаться от линии передачи данных.
  • Диапазон мощности от 3,0 до 5,5 В.
  • Измеряет температуру от -55°C до + 125°C (от -67 °F до + 257 °F) ± 0,5°C от -10°C до + 85°C.
  • Разрешение термометра выбирается пользователем от 9 до 12 бит.
  • Преобразует температуру в 12-битное цифровую переменную в 750 мс (макс.).
  • Определяемые пользователем энергонезависимые (NV) настройки сигнализации.
  • Команда поиска по тревоге идентифицирует и адресует устройства, температура которых находится за пределами запрограммированных пределов (состояние аварийной сигнализации).
  • Применяется в термостатических устройствах, промышленных системах, потребительских товарах, термометрах или в любых термических чувствительных системах.

Комплектующие

Чтобы сделать термометр, вам понадобятся следующие детали:

Из программного обеспечения нужно иметь установленную Arduino IDE.

Библиотеки

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

/Progam Files (x86)/Arduino/Libraries (по умолчанию):

  • 1- Wire шина;
  • Dallas Temperature (делает все вычисления и другие вещи);
  • Liquid Crystal I2C.

Все библиотеки вы можете скачать по ссылкам выше или на нашем сайте в разделе Библиотеки.

Термометр через последовательный монитор

Чтобы отобразить данные на последовательном мониторе, подключите датчик DS18B20 к Arduino, используя перемычки и макет, и не забудьте подключить или припаять резистор 4.7k между контактом 2 и 3 датчика.

Затем скачайте, откройте и загрузите файл .ino, который называется — DS18B20_Serial, ниже.

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

#include <OneWire.h> #include <DallasTemperature.h> // Провод данных подключен к контакту 2 на Arduino #define ONE_WIRE_BUS 2 // Настройка oneWire для связи с любыми устройствами OneWire // (не только Maxim/Dallas температурные IC) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup(void) { // Старт серийного порта Serial.begin(9600); Serial.println(«Dallas Temperature IC демо»); // Запуск библиотеки sensors.begin(); } void loop(void) { // запрашиваем sensor.requestTemperatures() для получения глобальной температуры // запрос всех устройств на шине Serial.print(» Запрашиваем температуру…»); sensors.requestTemperatures(); // Отправляем команды для получения температуры Serial.println(«DONE»); Serial.print(«Температура: «); Serial.print(sensors.getTempCByIndex(0)); // Почему «byIndex»? // У вас может быть несколько IC на одной шине. // 0 относится к первой IC delay(1000); }

Термометр с ЖК-дисплеем

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

Подключите ЖК-дисплей I2C к контактам UNO:

  • A4 (SDA),
  • A5 (SCL),
  • к цифровому выходу 2.

Затем скачайте и загрузите файл .ino, который называется — DS18B20_I2C_LCD. Если все в порядке, вы увидите показания температуры на дисплее.

#include <OneWire.h> #include <DallasTemperature.h>// #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); #define ONE_WIRE_BUS 2 // Настройте oneWire для связи с любыми устройствами OneWire (а не только с микросхемами температуры Maxim / Dallas) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { lcd.init(); lcd.backlight(); sensors.begin(); } void loop() { sensors.requestTemperatures(); lcd.setCursor(0, 0); lcd.print(sensors.getTempCByIndex(0)); lcd.print(» *C»); delay(3000); }

На этом пока всё. Хороших вам проектов.

Урок 7. Термометр на базе DS18B20 и OLED дисплея 128X64

Для термометра отлично подходит датчик температуры DS18B20. Он позволяет измерять температуру в домашних, так и в уличных условиях, потому что исполнен с водонепроницаемом корпусе. В качестве дисплея будем использовать матрицу 0.96 128X64 OLED.

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

  • Датчик температуры DS18B20 1 метр. (Герметичный)
  • Экран 0.96 128X64 OLED,
  • Breadboard
  • Набор проводов Папа-Папа
  • Микроконтроллер Arduino

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

  • OneWire Arduino Library
  • OLED I2C OLED_I2C с поддержкой Русского и Украинского языка.
  • Dallas Temperature

Сборка:

1) OLED дисплей подключаем к arduino следующим образом:

Arduino Uno Экран 0.96 128X64 OLED
5V VCC
GND GND
Pin 9 SCL
Pin 8 SDA

Для удобства подключения можно использовать макетную плату.

2) Датчик температуры DS18B20 подключается к arduino следующим образом.

Распиновка для влагозащитного датчика DS18B20 с метровым проводом:

Arduino UNO Влагозащитный датчика
DS18B20
5V Красный провод ( 5V)
GND Черный провод (GND)
Pin 10 Желтый провод (Сигнальный) (Необходимо подтянуть резистором 4,7кОм к 5V )

В случае, если Вы будете использовать не влагозащитный датчик в корпусе to92.(Датчик температуры DS18B20 в корпусе TO-92)

Теперь необходимо записать скетч в arduino

#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 10 // номер пина к которому подключен DS18B20 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); #include <OLED_I2C.h> OLED myOLED(8, 9, 8); // 8pin — SDA , 9pin — SCL extern uint8_t RusFont; // Русский шрифт extern uint8_t MegaNumbers; // Подключение больших шрифтов extern uint8_t SmallFont; // Базовый шрифт без поддержки русскийх символов. void setup() { sensors.begin(); myOLED.begin(); } void loop() { sensors.requestTemperatures(); myOLED.clrScr(); // очищаем экран myOLED.setFont(RusFont); // Устанавливаем русский шрифт myOLED.print(«Ntvgthfnehf», CENTER, 0); // Выводим надпись «Температура» myOLED.setFont(SmallFont); myOLED.print(«iarduino.ru», CENTER, 55); // вывод текста myOLED.setFont(MegaNumbers); myOLED.print(String(sensors.getTempCByIndex(0) , 1), CENTER, 9); // Отображение температуры myOLED.update(); delay(100); }

Результаты:

DS18B20 — это цифровой датчик температуры. Датчик очень прост в использовании. Во-первых, он цифровой, а во вторых — у него всего лишь один контакт, с которого мы получаем полезный сигнал. То есть, вы можете подключить к одному Arduino одновременно огромное количество этих сенсоров. Пинов будет более чем достаточно. Мало того, вы даже можете подключить несколько сенсоров к одному пину на Arduino! Но обо всем по порядку.

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

DS18B20 имеет различные форм-факторы. Так что выбор, какой именно использовать, остается за вами. Доступно три варианта: 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92. Серфинг по eBay или Aliexpress показывает, что китайцы предлагают версию TO-92 во влагозащищенном корпусе. То есть, вы можете смело окунать подобное чудо в воду, использовать под дождем и т.д. и т.п. Эти сенсоры изготавливаются с тремя выходными контактами (черный — GND, красный — Vdd и белый — Data).

Различные форм-факторы датчиков DS18B20 приведены на рисунке ниже.

Модель DS18B20 во влагозащищенном корпусе:

DS18B20 удобен в использовании. Запитать его можно через контакт data (в таком случае вы используете всего два контакта из трех для подключения!). Сенсор работает в диапазоне напряжений от 3.0 В до 5.5 В и измеряет температуру в диапазоне от -55°C до +125°C (от -67°F до +257°F) с точностью ±0.5°C (от -10°C до +85°C).

Еще одна крутая фича: вы можете подключить параллельно вплоть до 127 датчиков! и считывать показания температуры с каждого отдельно. Не совсем понятно, в каком проекте подобное может понадобится, но подключить два сенсора и контролировать температуру в холодильнике и морозильной камере можно. При этом вы оставите свободными кучу пинов на Arduino… В общем, фича приятная.

Что вам понадобится для контроля температуры с помощью Arduino и DS18B20

Программное обеспечение

  • Естественно, вам необходима Arduino IDE;
  • Библиотека OneWire library, которая значительно облегчает работу с Arduino и датчиком DS18B20;
  • Скетч…

Скачать Arduino IDE можно с официального сайта Arduino.

Библиотеку OneWire Library можно скачать на OneWire Project Page (желательно скачивать последнюю версию библиотеки).

Оборудование

  • Как минимум один цифровой датчик температуры DS18B20;
  • Контроллер Arduino (в данном примере используется Arduino Uno);
  • 3 коннектора;
  • Монтажная плата (Breadboard);
  • USB кабель для подключения Arduino к персональному компьютеру.

USB кабель необходим для программирования нашего Arduino. После того, как вы «зальете» скетч на плату, можно подключать ее к отдельному источнику питания.

Подключение DS18B20 к Arduino

Датчик подключается элементарно.

Контакт GND с DS18B20 подключается к GND на Arduino.

Контакт Vdd с DS18B20 подключается к +5V на Arduino.

Контакт Data с DS18B20 подключается к любому цифровому пину на Arduino. В данном примере используется пин 2.

Единственное, что необходимо добавить из внешней дополнительной обвязки — это подтягивающий резистор на 4.7 КОм.

Схема подключения DS18B20 к Arduino показана ниже (в скетче, который будет приведен ниже, проверьте строки 10 и 65. В них указаны пины, к которым вы подключали контакт сигнала с датчика и режим питания!):

На рисунке ниже приведена фотография нашей простой схемы «в жизни».

Паразитное и обычное питание

Есть альтернативный вариант подключения — так называемое «паразитное» подключение. В этом случае мы не будем подключать пин +5V к пину Vdd на датчике DS18B20. Вместо этого мы подключим контакт Vdd с датчика DS18B20 к GND. Преимущества такого подключения очевидны: нам понадобится всего два коннектора!

Недостатком такого подключения является ограничение количества одновременно подключаемых сенсоров. Кабели для подключения должны быть максимально короткими!

В общем, с «паразитным» подключением надо быть аккуратнее и лучше его все-таки не использовать. Результаты (значения температур) могут оказаться самыми неожиданными.

Скетч для Arduino и сенсора DS18B20

Установливаем библиотеку OneWire Library

После того как вы скачали архив с библиотекой, ее надо импортировать. Для этого в Arduino IDE выберите пункт “Sketch” — “Import Library” — “Add Library” и выберите архив, который вы скачали. Если у вас возникли проблемы, с установкой библиотеки, ознакомьтесь с инструкцией по установке библиотек в Arduino.

Загружаем скетч на Arduino

Скетч, который представлен ниже, есть в библиотеке OneWire, в категории examples. Перейдите в “File” — “Examples” — “OneWire” и выберите пример “DS18x20_Temperature”. Код программы представлен ниже.

Данный пример использует библиотеку OneWire Library, для того, чтобы собрать данные со всех подключенных датчиков температуры DS28B20 (как подключить несколько сенсоров описано в конце статьи) и отобразить их в окне серийного монитора Arduino IDE.

В окне серийного монитора вы увидите примерно следующее:

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

Temperature = 21.37 Celsius, 70.47 Fahrenheit

No more addresses.

Обычное или паразитное питание?

DS18B20 может работать в обычном или в так называемом «паразитном» режиме. В обычном режиме для подключения используется 3 коннектора, в «паразитном» режиме — в его лишь 2.

Вам надо настроить правильный режим в скетче, чтобы снять достоверные показания с датчика:

Убедитесь, что вы указали корректные пины!

В строке 10, где указано “OneWire ds(2);” устанавливается пин, к которому подключен контакт data с сенсора.

В этом примере использован пин 2, но значения пина по умолчанию в примере OneWire стоит на 10. Можно использовать и его.

Как подключить несколько сенсоров DS18B20 к Arduino?

Вы можете подключить несколько цифровых датчиков температуры DS18B20 параллельно. При этом библиотека OneWire library позволит вам считывать данные со всех датчиков одновременно.

Ниже описаны два метода подключения сенсоров.

Для большого количества сенсоров (больше 10), надо использовать резисторы с меньшим сопротивлением (например, 1.6 КОм или даже меньше).

Кроме того, если вы подключаете параллельно более 10 датчиков, могут возникнуть проблемы (погрешности при съеме показаний). Поэтому рекомендуется устанавливать дополнительный резистор сопротивлением 100…120 Ом между контактом data на Arduino и data на каждом сенсоре!

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

ROM = 28 88 84 82 5 0 0 6A

Chip = DS18B20

Data = 1 51 1 4B 46 7F FF F 10 FE CRC=FE

Temperature = 21.06 Celsius, 69.91 Fahrenheit

ROM = 28 DA CA 27 5 0 0 49

Chip = DS18B20

Data = 1 4E 1 4B 46 7F FF 2 10 D9 CRC=D9

Temperature = 20.87 Celsius, 69.57 Fahrenheit

No more addresses.

Выбираем правильный сенсор

Было бы неплохо знать, с какого именно сенсора вы получаете данные, когда вы используете параллельно несколько датчиков. Как это сделать?

Серийный номер

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

Вы могли обратить на примерах выше, что скетч выдает нам данные в виде 64-битного серийного номера — значение “ROM”. Например:

28 88 84 82 5 0 0 6A или 28 DA CA 27 5 0 0 49 в примере выше.

Не забывайте, если вы используете одновременно большое количество датчиков (10 и больше), надо добавить резисторы 100 … 120 Ом между контактами data с сенсора DS18B20 и пином data на Arduino (для каждого датчика!).

Нормальный режим питания

Ниже показана схема параллельного подключения нескольких сенсоров с использованием трех контактов.

Паразитный режим питания

В «паразитном» режиме контакт Vdd остается фактически не задействован. Питание датчика осуществляется через контакт data.

Задумал я сделать себе станок по изготовлению прутка пластика диаметром 1,75 мм для печати на 3D принтере. И прокручивая в голове как это все будет выглядеть, изготовил “краник” состоящий из трубы 1/2″ и заглушки с просверленным отверстием на 1,75 мм через который будет выдавливаться готовый пластик. Для этой трубы нашел нагревательные элементы, которые должны нагревать трубу до 200-250 градусов. Так как нагревательные элементы довольно простые, работающие как кипятильник у них нет регулировки по температуре, а мне же нужно держать заданную температуру. Для решил найти терморегулятор естественно пошел на Aliexpress и начал там искать подходящий. Там много “слабых” и дешевых терморегулятором, которые до 100C , но нашелся там терморегулятор и до 1000C и стоил он по моим меркам довольно много, вот ссылка: http://ali.pub/2wpnn1 Поэтому было решено сделать свой термостат. Для этого был закуплен модуль для термопары K типа MAX6675 и реле мощностью на 30A ( как раз для кипятильников) ну и ардуинки у меня уже были закуплены на случай “апокалипсиса”. По цене это все мне обошлось довольно не дорого, так что это получился лучший вариант.

Приобрести все компоненты можно здесь:

arduino uno: http://ali.pub/2wpo97

Модуль термопары К типа max6675: http://ali.pub/2wpog0

Модуль реле: http://ali.pub/2wpp8l

LCD дисплей 16×2: http://ali.pub/2wppku

Итак все компоненты подключил по данной схеме:

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

Блоки FLProg довольно тяжело описывать на сайте, поэтому я просто оставлю ссылку на проект в FLProg: https://yadi.sk/d/S3LleCYav6fQqA

Демонстрация работы в видео:

Термостат на Arduino

Давайте соорудим для начала на Arduino что‑нибудь простенькое. В главе 12 мы уже изобретали термостаты на чисто аналоговых компонентах. Теперь посмотрим, как можно привлечь к этому полезному в хозяйстве делу цифровую технику.

Мы уже упоминали (см. главу 18 ), что в состав AVR‑контроллеров входит 10‑разрядный многоканальный АЦП. На платах Arduino его выводы специально помечены, как аналоговые входы (буквой А с цифрами от нуля до пяти). Заметьте, что они могут быть задействованы и как обычные цифровые с номерами от 14 до 18, и мы в таком качестве ими еще воспользуемся. Один из этих входов мы как раз и применим для измерения температуры, а управлять подключением нагрузки будем с одного из цифровых выходов.

Итого нам понадобятся:

□ плата Arduino Uno (годится и любая другая);

Я термистор в качестве датчика температуры. Подойдет, например, имеющийся

□ «Амперке» В57164‑К 103‑J с номинальным сопротивлением 10 кОм при 25 °C – именно его характеристики приведены в главе 13 в качестве иллюстрации к свойствам термисторов;

□ переменный резистор 10 кОм, постоянный резистор 620 Ом;

□ исполнительное реле – электромагнитное (обязательно с усилительным транзисторным ключом, см. далее) или твердотельное.

В продаже имеются модули на основе 5‑вольтовых электромагнитных реле, специально подогнанных под управление от выходов Arduino. Электромагнитные реле сами по себе требуют довольно большого тока управления (и он тем больше, чем мощнее реле, – непосредственно от логики могут работать только самые маломощные герконовые реле), потому во всех подобных релейных модулях обязательно имеется транзисторный усилительный ключ. Например, в «Амперке» продается такой модуль на основе реле HLS8L‑DC5V‑S‑C. Если вас электромагнитное реле не устраивает, и вы стремитесь к предельной простоте схемы, то можно поискать твердотельные реле – подойдут, например, CX240D5R фирмы Crydom или аналогичные с напряжением срабатывания 3‑15 В. У них ток управления составляет около 15 мА при 5 вольтах на входе, что допустимо для AVR, потому их управляющий вход можно подключать к цифровому выводу Arduino напрямую. Правда, при напряжении 220 вольт коммутировать нагрузку мощностью больше киловатта CX240D5R не может, но нам в данной задаче больше и не требуется.

Схема термостата на Arduino Uno показана на рис. 21.2.

Рис. 21.2. Схема термостата на Arduino Uno

На схеме обмотка реле К1 (с нормально разомкнутыми контактами) условно присоединяется прямо к цифровому выходу Arduino – подразумевается, что либо это упомянутое ранее твердотельное реле с нужными характеристиками, либо просто управляющий вход готовой платы релейного модуля. Для контроля состояния схемы одновременно с нагревателем срабатывает светодиод. Программа термостата в соответствии с подобной схемой крайне проста:

Величины резисторов подогнаны под указанный термистор В57164‑К с номинальным сопротивлением 10 кОм при 25 °C (103‑J). В соответствии с программой срабатывание реле будет происходить вблизи значения на выходе АЦП, равного 500. Это составляет примерно середину 10‑разрядного диапазона (вся шкала – 1024 градации), т. е. такое значение установится при приблизительном равенстве верхнего и нижнего сопротивлений относительно входа АО (напряжение на этом входе тогда составит примерно 2,5 вольта).

Обратите внимание, что обе функции if не заканчиваются привычным else . Для предотвращения дребезга в программу введен гистерезис: реле включается при превышении значения кода 510, а выключается при снижении до значения 490. В промежутке оно будет сохранять предыдущее состояние. Двадцать единиц кода (то, что в главе 12 мы называли зоной нечувствительности ) соответствуют примерно 10 милливольтам, т. е. гистерезис при температуре в пределах 30–40 градусов составит чуть меньше одной десятой градуса (проверьте сами с помощью табл. 13.1 из главы 13 ).

Установка температуры срабатывания с помощью резистора R2 при таких параметрах возможна в пределах примерно от 22 до 96 °C. Разумеется, на практике такой широкий диапазон регулировки не требуется, потому целесообразно номинал R2 уменьшить. Величина R1 подбирается так, чтобы R1 и номинальное значение R2 в сумме составляли сопротивление термистора при нижнем значении желаемого диапазона температур (в соответствии с табл. 13.1). Для более точной подгонки можно провести калибровку и изменить пороговые значения в программе, измеряя установившуюся температуру обычным термометром.

Если вы примените в этой схеме другие датчики, то не забудьте про знак температурного коэффициента. Обычный диод или транзистор в диодном включении (как в схемах из главы 13 ) также имеют отрицательный наклон характеристики, потому для них в программе придется поменять только числовые значения порога срабатывания. А вот полупроводниковые датчики типа ТМР35 (см. главу 13 ) или просто металлические термометры сопротивления (как в конструкции из главы 17 ) имеют положительный температурный коэффициент, поэтому условия срабатывания придется изменить на обратные. Причем не просто поменять «больше» на «меньше» и наоборот, а изменить и соотношение порогов для гистерезиса – в новой ситуации нагреватель должен будет включаться, если значение меньше меньшего порога, а выключаться – если больше большего.

Как видите, обращаться с Arduino не просто, а очень просто. Работа с АЦП относится к базовым функциям платформы и не требует даже подключения отдельных библиотек. Оцените, насколько облегчили создатели платформы жизнь разработчику: вызову функции anaiogRead () соответствуют операции установки режима АЦП, тактовой частоты его работы, выбора канала и пр.

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

Климат-контроль на Arduino

Где скачать необходимые библиотеки и как их установить?

У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?

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

Вставьте QuadDisplay в левый нижний слот

Прошейте контроллер скетчем через Arduino IDE.

climate-control.ino // библиотека для работы с датчиком DHT11 #include <TroykaDHT.h> // Подключаем библиотеку для работы с дисплеем #include <QuadDisplay.h> // номер цифрового пина реле 1 #define RELAY_1_PIN A4 // номер цифрового пина реле 2 #define RELAY_2_PIN A2 // номер цифрового пина дисплея #define DISPLAY_PIN 11 // создаём объект класса DHT11 и передаём номер пина к которому подключён датчик DHT dht(4, DHT11); // переменная для хранения состояние системы // а именно какую информацию выводить на дисплей // температуру или влажность bool state = true; // переменная для хранения показателя температуры окружающей среды float temperature = 0; // переменная для хранения показателя влажности окружающей среды float humidity = 0; long currentMillis = 0; void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); // начало работы с датчиком DHT11 dht.begin(); // назначаем 2 пина в режиме выхода pinMode(RELAY_1_PIN, OUTPUT); pinMode(RELAY_2_PIN, OUTPUT); currentMillis = millis(); } void loop() { // если прошёл заданный интервал времени if (millis() — currentMillis > 3000) { state = !state; currentMillis = millis(); dht.read(); } switch (dht.getState()) { // всё OK case DHT_OK: // считываем показания температуры и влажности с датчика temperature = dht.getTemperatureC(); humidity = dht.getHumidity(); // выводим показания температуры или влажности if (state) { displayTemperatureC(DISPLAY_PIN, temperature); } else { displayHumidity(DISPLAY_PIN, humidity); } break; // если ошибка выводим на дисплей «Err» default: displayDigits(DISPLAY_PIN, QD_NONE, QD_E, QD_r, QD_r); break; } // если температура превысила 35 градусов if (temperature > 35) { // включаем реле 1 digitalWrite(RELAY_1_PIN, HIGH); } else { // иначе выключаем реле digitalWrite(RELAY_1_PIN, LOW); } // если влажность стала менее 20 % if (humidity < 20) { // включаем реле 2 digitalWrite(RELAY_2_PIN, HIGH); } else { // иначе выключаем реле 2 digitalWrite(RELAY_2_PIN, LOW); } // ждём 1 секунду delay(1000); }

Скачайте и установите библиотеку для работы с «трёхногим» дисплеем.

Хочу поделиться опытом создания Arduino web server — контроль влажности и температуре в подвале. Arduino Pro Mini + DHT11 и FC-28 = Ваше спокойствие.

На одном из строительных объектов делали строение с бассейном, сауной, тренажёрным залом и комнатой отдыха. Все это было в приличных размерах как для одного хозяина. Чисто технически понадобилось 2 подвала: 1-й для обслуживания насосов бассейна — маленький, 2-й для обслуживания систем обогрева и накопления тепла.
Закуплены были 2 напольных евро-люка разных размеров для двух подвалов. Люки зарывались 4-мя винтами и имели очень плотные резиновые уплотнения. Чтобы открыть подвал, необходимо было 4 человека (и немного здоровья). При работе всей техники в подвале поднималась температура и влажность, при этом контролировать что там происходит практически неудобно.
В итоге было принято решение о создании устройства, которое бы показывало, а также управляло вентилятором, звуковым сигнализатором, электро-клапаном (воды), и контролировать его можно было с любого смарт устройства.
За основу взял Arduino Pro Mini плюс Ethernet ENC28J60. Для замера влажности и температуры датчик DHT11 и FC-28 (датчик влажности почвы – в роли датчика затопления).
Тех задание:
1) Управление и информирование через Web интерфейс;
2) Включение и отключение вентиляции по заданному уровню влажности;
3) Включение и отключение клапана водопровода (возможно, ревун, откачивающий насос) при затоплении.
В выборе Arduino Pro Mini тоже надо подумать, так как существуют разные исполнения:
Лучше брать ту, в которой стабилизатор по мощнее, так как та, что по слабее, при активных реле и сетевом контроллера закипит стабилизатор, что приводит к зависанию системы (я упустил этот нюанс и получил зависания, но приобрел более ценное – опыт). Сетевые контроллеры также надо выбирать внимательно, так как есть те которые от 5В (стабилизатор на обратной стороне модуля) и на 3,3В. Нужен будет дополнительный стабилизатор на 3,3В.
Блок питания взял от обычного свитча (или роутера) TP-Link 9В 500мА (примерно), они часто встречаются за копейки от паленых свитчей или роутеров.
Принцип работы простой: есть 2 датчика, которые сливают информацию на контроллер. В зависимости от ситуации контроллер включает и выключает реле (клапана водопровода, возможно ревун, откачивающий насос, вентилятор). Управление и мониторинг через WEB интерфейс который реализован программой на базе модуля ENC28J60.
1)Сработка датчика затопления = включение реле (клапана водопровода(ревун, откачивающий насос ); + информирование на web странице крупным шрифтом;
2) Повышение влажности выше установленного уровня = включение реле вентилятора;
3) Вся информация о температуре влажности и затоплению выводится на web страницу;
4) При понижении температуры ниже 5 градусов оповещение на web сайте о угрозе.

Наглядно можно увидеть на видео:

На практике все очень удобно. Всегда можно посмотреть с Телевизора (Smart), телефона или планшета — что творится в закрытых помещениях, не открывая их.
Люблю создавать устройства, которые облегчают жизнь, а не просто создать игрушку поиграться и выбросить.
С дизайном странички сильно не напрягался, так как носит технический характер и должна быть практичной, а не сложной и красивой.

Надеюсь, эта статья кому-то поможет, а кого то вдохновит на создание своего проекта. Ссылки на модули: Arduino Pro Mini Ethernet ENC28J60 DHT11 FC-28
Программа для Arduino
Новая Стабильная версия программы

Термостат на Arduino

Напривозил много оригинальной электроники
Имеется большой каталог с микроконтроллерами и расширителями для них.
Москва. Возможно доставка в другие города. Сергей, физ. лицо, 89776100987
Можно обращаться в WhatsApp и Telegram по всем вопросам
Малинка:
Raspberry Pi 3 B+ — 2400руб
Raspberry Pi 3 А+ — 1700руб
Sparkfun Набор Raspberry Pi 3 А+, адаптер питания, корпус, microSD 16Гб — 2400руб
Sparkfun Набор Raspberry Pi zero W, microSD 16 ГБ, HDMI кабель,USB OTG-кабель, адаптер питания — 2500руб
Vilros Набор Raspberry Pi 3 B+, корпус, адаптер питания, HDMI кабель, microSD 32Гб, картридер, радиаторы — 4200руб
Sparkfun Набор Raspberry Pi 3 B+, Pi Wedge, FTDI Basic Breakout 3,3 В, Макет Полноразмерный (голый), черный Pi Tin, MicroSD 16 ГБ, картридер, Разноцветные пуговицы (4 шт), Ассорти из светодиодов (20 шт), Резистор 330 Ом 1/6 Вт PTH (20 шт.), Raspberry Pi GPIO Ленточный кабель 40-контактный, USB Mini-B Кабель, адаптер питания, Соединительные провода (10 пакетов), cтандартные проволочные перемычки (30 шт.) — 5200руб
OddWires Набор Raspberry Pi 3 B+,16 ГБ microSD-карта класса 10, адаптер питания, CP102 USB для последовательного адаптера, Raspberry Pi прозрачный чехол, HDMI кабель, GPIO кабель и коммутационная плата,MCP3008 Микрочип 8-канальный 10-битный АЦП, модуль джойстика, ИК пульт дистанционного управления с батареей, макеты, провода, перемычки, ассорти светодиоды,RGB LED,Пьезо Зуммер Пассивный и Активный, переключатели, резисторы — 5000руб
Raspberry Pi Infrared Camera Module – 1300руб
Raspberry Pi Camera module v2 — 1500руб
Raspberry Pi Touchscreen – 4000руб
Raspberry Pi UPS Hat — 1100руб
ReSpeaker 4-микрофонный массив для Raspberry Pi — 1800руб
Ардуино:
Pro Micro ATmega32U4 3.3В/8МГЦ — 1300руб
Pro Micro ATmega32U4 5В/16МГЦ — 1300руб
Arduino Pro Mini 328 3.3В/8МГЦ — 650руб
Arduino Pro Mini 328 5В/16МГЦ — 650руб
Arduino Mega 2560 R3 — 2400руб
Arduino Due — 2700руб
Arduino Uno Rev3 – 1300руб
LilyPad Arduino USB — ATmega32U4 Board — 1600руб
LilyPad Arduino 328 Main Board — 1000руб
Arduino Fio — 1800руб
Arduino Mkr1000 — 2300руб
Arduino Mkr Vidor 4000 — 5000руб
Teensy 3.6 — 2000руб
Teensy 3.2 — 1300руб
Teensy 2.0 – 1000pуб
BeagleBone Black rev C – 3200руб
BeagleBone Black – 2500руб
BeagleBone Blue – 4500руб
BeagleBone Pocket – 1600руб
Искусственный интеллект:
NVIDIA Jetson Nano Developer Kit — 7500руб
Google Coral Development Board — 9500руб
NVIDIA Jetson AGX Xavier Module — 45500руб
NVIDIA Jetson Xavier — 65000руб
Coral environmental sensor board v 1.0 – 1600руб
Intel Neural Compute Stick 2 – 7000руб
Coral Camera CA1 -1600руб
Прочие платы:
STEMTera (Black) — 2800руб
Mbed v014.1 — 4000руб
Mbed v005.1 — 3600руб
Стартовый набор SparkFun Qwiic для Onion Omega — 9000руб
LattePanda Alpha 864 – 20000р
Automic Pi – 2500руб
Pine H64 “Model B” 3Gb – 2800руб
Rock64-1G – 1600руб
Odroid XU4Q – 3000руб
Adafruit Metro 328 Starter Pack — 2800руб
Adafruit Trinket M0, for use with CircuitPython & Arduino IDE — 600руб
Adafruit GEMMA M0, Miniature wearable electronic platform — 650руб
SparkFun gator:bit v2.0, micro:bit Carrier Board — 1200py6
micro:bit Board — 900руб
HackRF One — 19500руб
LimeSDR Mini — 12500руб
LimeSDR — 22500руб
bladeRF 2.0 micro xA4 — 31000руб
SparkFun PicoBoard — 3000руб
SparkFun Stepoko — 10000руб
Лидары и камеры:
Raspberry Pi Camera module v2 — 1500руб
Pixy2 CMUcam5 — 3600руб
CMOS Camera Module — 2000руб
OpenMV m7 — 4500руб
IR Array Breakout, 55 Degree FOV, MLX90640 (Qwiic) — 4500руб
Набор FLIR Радиометрический Lepton Dev — 13000руб
+PureThermal 2 интеллектуальная плата ввода / вывода FLIR Lepton Smart — 6000руб
RPLidar A2M8 360градусов Laser Range Scanner – 20000руб
RPLidar A3M1 360градусов Laser Range Scanner – 38000руб
TFMini – Micro Lidar Module – 2500руб
Расширители:
Thing Plus ESP32 WROOM — 1400руб
ESP8266 Thing Dev Board — 1100руб
WiFi Module ESP8266 — 450руб
Adafruit Feather HUZZAH with ESP8266 Loose Headers — 1100руб
SparkFun GPS Logger Shield – 3300руб
GPS Mouse GP-808G (72 Channel) – 2500руб
SparkFun Venus GPS with SMA Connector – 3300руб
SparkFun GPS-RTK Board, NEO-M8P-2 (Qwiic) — 13000руб
Adafruit Ultimate GPS Breakout — 66 channel w/10 Hz updates Version 3 — 2600руб
CAN-BUS Shield – 1700руб
Bus Pirate v3.6 1700руб, с кабелем – 2000руб
Wireless Motor Driver Shield — 1800руб
microSD Shield — 1000руб
Vernier Interface Shield — 1600руб
MP3 Player Shield — 1800руб
Weather Shield — 2600руб
Monster Moto Shield — 4700руб
EasyVR Shield 3.0 Для распознавания голоса – 3300руб
XBee Shield — 1000руб
OpenLog — 1000руб
Sound Detector (с ножками) — 750руб
EasyDriver — Stepper Motor Driver – 1000руб
Big Easy Driver — 1300руб
URM37 V5.0 Ультразвуковой датчик для Arduino/RaspberryPi — 950руб
URM04 Ультразвуковой датчик (RS485) — 1700руб
2x1A моторный щит постоянного тока для Arduino 650руб
Винтовой щит для Arduino — 500руб
Набор беспроводных джойстиков — 2500руб
Усилитель тензодатчика SparkFun HX711 — 650руб
SparkFun Simultaneous RFID Reader, M6E Nano — 13000p
SparkFun RS232 Shifter SMD — 1000руб
Pro nRF52840 Mini, Bluetooth Development Board — 2000руб
THAT 1646 OutSmarts Breakout — 1000руб
RedBoard Turbo, SAMD21 Development Board — 1650руб
SparkFun Barometric Pressure Sensor Breakout, MPL115A1 — 900руб
Little Soundie Audio Player — 1000руб
XBee Explorer Serial — 1300руб
Music Instrument Shield — 2100руб
SparkFun Environmental Combo Breakout, CCS811/BME280 (Qwiic) — 2300руб
PN532 NFC/RFID controller breakout board v1.6 — 2400руб
Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit – v2.3 — 1300руб
Adafruit 9-DOF Absolute Orientation IMU Fusion Breakout, BNO055 — 2300руб

Термостат и термометр на 4 канала (Arduino UNO, 1602А, LM325, КТ503)

Принципиальная схема самодельного четырехканального термостата с отображением температур, построен на основе Arduino UNO, LM325 и с дисплеем 1602А, позволяет управлять четырьмя раздельными нагрузками.

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

Работа четырехканального термометра и его программы очень подробно описана в предыдущей статье (Л.1), поэтому здесь речь будет только об изменениях для реализации работы четырехканального термостата.

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

Принципиальная схема показана на рис.1.

Рис. 1.Принципиальная схема термостата на Arduino UNO, LM325 с дисплеем 1602А.

В отличие от первой схемы (Л.1) здесь присутствуют четыре транзисторных ключа, нагруженных на обмотки реле К1-К4, управляющие четырьмя различными нагревательными устройствами (Н1-Н4). Управляющие команды на эти ключи поступают от четырех цифровых портов D9-D12 платы ARDUINO UNO.

Программа

Программа приведена в таблице 1.

Таблица 1.

Первое отличие в том, что заданы порты для управления нагревателями. Это порты D9-D12, заданы они здесь:

pinMode(12, OUTPUT);

pinMode(11, OUTPUT);

pinMode(10, OUTPUT);

pinMode(9, OUTPUT);

Можно выбрать другие свободные цифровые порты, после подключения индикатора остались еще D8 и D13. Но автор выбрал именно эти: D9, D10, D11, D12. Второе отличие в том, что для управления нагревателями используется компараторная функция if. В строках:

if(temp < -15)digitalWrite(12, HIGH);

if(temp > -15)digitalWrite(12, LOW);

if(tempi < 1)digitalWrite(11, HIGH);

if(tempi > 1)digitalWrite(11, LOW);

if(temp2 < 20)digitalWrite(10, HIGH);

if(temp2 > 20)digitalWrite(10, LOW);

if(temp3 < 10)digitalWrite(9, HIGH);

if(temp3 > 10)digitalWrite(9, LOW);

В этих строках указывается при какой температуре, какой логический уровень должен быть на соответствующем порту. Например, при температуре первого датчика (Т1) ниже -15°С на порту D12 будет логическая единица. При температуре второго датчика (Т2) ниже 1°С на порту D11 будет логическая единица.

При температуре третьего датчика (ТЗ) ниже 20°С на порту D10 будет логическая единица. При температуре четвертого датчика (Т4) ниже 10°С на порту D9 будет логическая единица. Конечно, температуры можно задать и совсем другие, — любые, которые нужны для конкретного применения данного прибора.

Более того, уже в готовом устройстве, при необходимости их легко изменить. Для этого нужно подключить персональный компьютер к USB-порту платы ARDUINO UNO и загрузить программу с другими данными по температурным порогам. В принципе, для этого можно предусмотреть на корпусе готового прибора разъем USB.

Обычно, в «типовом» терморегуляторе есть петля гистерезиса, то есть, цепь, которая создает разницу между тепера-турой включения нагревателя и температурой его выключения. Это нужно для того чтобы нагреватель включался / выключался не очень часто. Особенно это важно, если нагревателем управляет электромагнитное реле.

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

delay(3000);

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

Детали

Электромагнитные реле К1-К4 можно применить любые с обмотками на 12V и контактами, достаточно мощными для управления конкретными нагревателями.

Выходные каскады можно сделать и по другим схемам, например, на оптоси-мисторах. В этом случае, к соответствующим портам платы ARDUINO UNO подключаются, через токоограничительные резисторы, светодиоды оптосимис-торов или, так называемых, «твердотельных реле».

Каравкин В. РК-08-17.

Литература: 1. Каравкин В. — Четырехканальный термометр на ARDUINO UNO, РК-06-17.

admin

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

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

Наверх