- Arduino беспроводной датчик температуры
- Беспроводной датчик температуры и влажности на ESP8266
- Создаем беспроводной термометр на Arduino
- Что нам потребуется
- Аппаратная часть
- Передатчик
- Принципиальные схемы
- Передатчик
- Перечень элементов
- Передатчик
- Программа передатчика
- Программа приемника
- Заключение
- Фото и видео
- Передатчик
Arduino беспроводной датчик температуры
Беспроводной датчик температуры и влажности на ESP8266
Цель этого проекта состоит в том, чтобы собрать устройство мониторинга температуры и влажности, которое транслирует температуру и влажность на удаленный сервер посредством wi-fi. Нам понадобятся Ардуино Уно (или аналог), датчик температуры и влажности DHT11, wi-fi модуль ESP8266 и сервис «ThingSpeak.com» для этого проекта. Это — замечательный проект, чтобы опробовать ESP8266 для передачи данных, так что начнем!
Шаг 1: Приготовьте всё необходимое
Для этого проекта использован Ардуино Уно, но подойдёт любая плата Ардуино или аналоги.
-USB — кабель типа А — B и 5-вольтовый источник питания USB
-Беспроводной приемопередатчик ESP8266.
-Датчик температуры/влажности DHT11, хотя DHT22 тоже подойдет
-Макетная плата (не требующая пайки)
-Провода для беспаечной макетной платы
Шаг 2: Создайте канал ThingSpeak
Чтобы фиксировать температуру и влажность онлайн, у Вас должны быть веб-сайт или веб-сервис, которые могут принимать данные метода GET http. В этом уроке я рекомендую ThingSpeak, но есть и другие службы, так что Вы вполне можете использовать что-то еще, чтобы собирать и хранить Ваши данные.
Если Вы будете использовать ThingSpeak, то Вы должны будете создать канал с двумя полями, один для температуры и один для влажности. На сайте есть много опций для отображения данных в графиках, так что можете изучить их самостоятельно и выбрать те, что Вам больше всего понравятся. Я остановился на двух простых линейных диаграммах с 10 точками переменных, чтобы сгладить случайные колебания данных . ThingSpeak даст ключ для Вашего канала, который Вы должны будете вписать в код, после чего Ваш каналсможет принимать данные.
Шаг 3: Подключение
На картинке Вы можете увидеть переднюю часть ESP8266 с 8 маркированными контактами. ESP8266 питается от 3.3 В, так что удостоверьтесь, что Вы соединяете контакт Vcc с 3.3-вольтовым контактом на контроллере. Это также означает, что Вы должны будете использовать преобразователь логических уровней или собрать делитель напряжения для последовательного соединения от платы контроллера до ESP8266, чтобы ничего не сжечь. Если Вы не захотите покупать преобразователь логических уровней, тогда, то Вы должны будете собрать делитель напряжения, задействовав два резистора.
Я взял резистор на 220 Ом и резистор на 470 Ом, которые приблизительно дадут 3.3 В. Если приемопередатчик требует 3.3 В, а плата контроллера может работать при таком напряжении, нет никакой потребности делать что-либо с соединением приемопередатчик — контроллер.
Точность датчика составляет только +/-5% влажности и 2°C, так что это не самый точный датчик. Он подходит только для температуры выше нуля. DHT22 более точен и умеет в отрицательные температуры, поэтому, если это важно для Вас, выбирайте его. Оба датчика работают с напряжениями 3.3 — 5В. Сигнальный контакт должен быть подключен через токоограничивающий резистор, номиналом 4.7 кОм.
Схема отображает как соединить провода. Для простоты использования все соединения с 5 В или 3.3 В красные, и все соединения с общим проводом синие. Подключаем провода следующим образом:
С контроллера на приемопередатчик
— TXD | RXD (через делитель напряжения)
— 3.3 В | Vcc, CH_PD, сброс
С контроллера на датчик температуры/влажности
— D7 | Сигнал (соединение с Vcc через нагрузочный резистор)
Шаг 4: Программирование
Прежде чем использовать код, Вы должны будете загрузить и установить библиотеку DHT от Adafruit. У них есть описание того, как установить, пользоваться их библиотекой и заходить на их хранилище GitHub. Их библиотека имеет разные опции (такие как теплосчетчик — их мы не будем разбирать здесь), но Вы можете самостоятельно выбрать их и использовать, если Вам понадобится!
Бод для ESP8266 установлен в начале .ino файла. Версия ESP8266, которая использовалась в сборке, поддерживает значения 9600 или 115200 бод. Обе из микросхем, которые я заказывал, установлены в 115200 бодов. Но если у вас возникли ошибки, смените бод на 9600 в качестве первого шага в отладке.
Есть несколько мест в коде со значениями в скобках ‘ ’. Это- те места, где Вам нужно будет вставить свои собственные значения, чтобы завершить проект. Это включает имя и пароль для Вашей сети WiFi и ключ для Вашего канала ThingSpeak. Есть код, чтобы использовать красно-зеленый светодиод для отладки и контроля состояния системы, но это не отображено в монтажных схемах. Если Вы хотите знать, верно ли работает работает система, Вы можете добавить пару светодиодов.
Заключительная ремарка, которая может сбить с толку — нельзя загрузить скетч в ардуино, к которому подключен модуль беспроводной связи. Скетч не загрузится, если они будут соединены, так что Вам нужно сначала отсоединить информационный провод — либо с передатчика, либо с контроллера.
Скачать скетч для Arduino IDE — ссылка
Поздравляю! Вы создали свой персональный беспроводной регистратор температуры и влажности! Вы великолепны! Можно оставить его в подвале и контроллировать влажность и температуру посредством проветривания/обогрева. Можно собрать его на печатной плате для удобства монтажа и использования на месте. Я надеюсь, что вам был полезен этот урок и Вы весело провели время! Следующим шагом можно попробовать запрограммировать ESP8266 непосредственно напрямую, в обход контроллера.
Создаем беспроводной термометр на Arduino
Узнайте, как использовать RF модуль 433 МГц совместно с ATMega328P-PU. В данной статье мы соберем схему из датчика DHT11 и радиочастотного передатчика. А также соберем приемное устройство с радиоприемником 433 МГц и LCD дисплеем.
Что нам потребуется
- компьютер с установленной Arduino IDE (я использую версию 1.6.5);
- библиотека VirtualWire (ссылка ниже);
- Arduino Mega;
- ATMega328P;
- программатор AVR MKII ISP;
- LCD дисплей;
- датчик температуры и относительной влажности воздуха DHT11;
- радиочастотные модули 433 МГц;
- перемычки;
- макетная плата;
- компоненты из перечня элементов, приведенного ниже.
В данной статье я покажу вам, как собрать устройство, которое измеряет температуру и относительную влажность воздуха и посылает измеренные значения с помощью стандартного радиочастотного модуля 433 МГц. Датчик температуры и влажности, используемый в устройстве, – это DHT11.
Существует множество способов передачи небольшого объема данных с помощью Arduino или контроллеров ATMega. Один из них использует уже готовую библиотеку, подобную RCSwitch, Radiohead или VirtualWire. Кроме того, можно отправить необработанные данные с помощью встроенного в микроконтроллер модуля UART. Но использовать встроенный модуль UART не рекомендуется, так как приемник будет собирать и все помехи, и микроконтроллер будет работать не так, как предполагалось. В данной статье для передачи и приема данных я использую библиотеку VirtualWire. Эта библиотека работает с Arduino IDE 1.6.2 и 1.6.5.
Модуль передатчика 433 МГц, когда не передает данные, всё равно излучает радиочастотные колебания и передает шум. Он также может создавать помехи другим радиочастотным устройствам. Чтобы не допустить этого, я включаю его, когда необходимо передать данные, и выключаю его, когда передача закончена.
Аппаратная часть
Нам необходимы две структурные схемы. Одна для передающего устройства, вторая для приемного.
Передатчик
- способ прошивки микроконтроллера → ISP;
- датчик для измерения температуры и влажности → DHT11;
- микроконтроллер для обработки данных → ATMega32p;
- способ беспроводной передачи данных → радиочастотный модуль 433 МГц.
- способ приема радиосигнала → радиочастотный модуль 433 МГц;
- способ обработки принятых данных → Arduino Mega;
- способ отображения температуры и влажности → 16×2 LCD.
Принципиальные схемы
Передатчик
В данном примере я не буду выводить неиспользуемые выводы микроконтроллера на внешние контакты термометра, после чего их можно было бы использовать для дальнейшего усовершенствования устройства. Здесь мы рассматриваем лишь идею для устройства и соберем его только на макетной плате.
Пожалуйста, обратите внимание, что приемник построен на базе платы Arduino Mega, которая не изображена на схеме. Для подключения платы Arduino Mega соедините с ней радиочастотный модуль и LCD дисплей согласно метка на схеме.
Перечень элементов
Передатчик
Программа передатчика
Сперва рассмотрим программу передающей части:
Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.
Программа приемника
Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью createChar я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).
В функции setup() вы создаете его с помощью createChar . createChar принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это lcd.createChar(1, degreesymbol) . Затем символ выводится на LCD с помощью функции lcd.write .
Заключение
В данной статье я использовал датчик температуры и влажности DHT11. Температура и влажность были преобразованы в массив символов, а затем переданы с помощью передатчика 433 МГц. На приемной стороне массив символов был разделен на пары и выведен на LCD. Для получения символа градусов я использовал функцию createChar библиотеки LiquidCrystal.
- Библиотека VirtualWire версия 1.6 (библиотека для Arduino для организации связи через радиомодули с использованием амплитудной манипуляции).
- Описание библиотеки VirtualWire.