Умный дом на базе ардуино: пошаговая инструкция по сборке

HTTP GET и JSON

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

Придумывать тут ничего не нужно, всё уже придумано за нас — это HTTP GET и JSON.

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

В Java и в Android есть готовые библиотеки для обработки данных в формате JSON. JSON текстовый формат, читается человеком, что полезно для отладки.

Для того, чтобы сформировать текущие данные от датчиков метеостанции создадим на веб-сервере новый PHP скрипт last-data-to-json.php.

Вызов скрипта :

где , как мы помним, это секретный ключ доступа к БД.

Пример ответа в формате JSON :

Необходимо напомнить, что у нас 3 датчика. Их ID и тип (DHT или BMP) жёстко закодированы по всему коду метеостанции. Такой способ хардкордного кодирования идеологически неверен, но для наколенного прототипа (где необходимо быстрое и простое решение) это разумный компромисс.

Скрипт берет из БД самые последние данные от этих разнотипных датчиков и упаковывает в формат JSON. Выборка данных из БД «с конца» просходит таким способом :

Домашняя метеостанция на Ардуино своими руками

Мы рассматривали подключение Ethernet HR911105A к Arduino и возможность включения светодиодов дистанционно. Сегодня мы воспользуемся данной сборкой, добавив к схеме цифровой датчик температуры и влажности DTH11 с трех пиновым разъемом стандарта 2.54 мм. Для проекта нам понадобится плата Arduino, датчик DTH11, Ethernet порт HR911105A 15/10 (12 разъемов), макетная плата и роутер.

Следуйте инструкции и вы сможете сделать свою «Домашнюю метеостанцию на Arduino UNO», получая данные о температуре и влажности на компьютере или смартфоне по локальной сети. Вы можете дописать скетч, чтобы при достижении определенной температуры включались светодиоды. Также вас может заинтересовать проект метеостанции на Arduino с Android смартфоном и блютуз модулем.

Как сделать метеостанцию на LM35

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

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

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

int temp1;  // освобождаем память для переменной "temp1"
int temp2;  // освобождаем память для переменной "temp2"
int temp3;  // освобождаем память для переменной "temp3"
float temp; // освобождаем память для переменной "temp"
byte val;   // освобождаем память для переменной "val"

String stringT = String("*");

void setup() {
  pinMode(A0, INPUT);    // сенсор LM35 подключим к аналоговому входу A0
  Serial.begin(9600);   // запуск аппаратного последовательного порта
  mySerial.begin(9600); // запуск программного последовательного порта
}

void loop() {
  temp1 = analogRead(A0); // считываем значение с датчика
  delay(60000);
  temp2 = analogRead(A0); // повторно считываем значение с датчика
  temp3 = temp1 - temp2;  // определяем, изменилась ли температура

  // отправляем сообщение только, когда изменилась температура
  
    if (temp3 != 0) {
  temp = ( temp2/1023.0 )*5.0*1000/10; // вычисляем значение температуры
  mySerial.println(temp + stringT);    // отправляем температуру на телефон
  Serial.println(temp + stringT);      // отправляем температуру на монитор
  Serial.println("");
}

  // отправляем сообщение, когда нажата кнопка "обновить" в приложении
  
    if (Serial.available()) // проверяем, поступают ли какие-то команды
  {
    val = Serial.read(); // переменная val равна полученной команде

    if (val == '1') {
  temp = ( temp2/1023.0 )*5.0*1000/10; // вычисляем значение температуры
  mySerial.println(temp + stringT);    // отправляем температуру на телефон
  Serial.println(temp + stringT);      // отправляем температуру на монитор
  Serial.println("");
}
  }

}

Как работают датчики?

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

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

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

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

Производитель поставляет абсолютно простые в установке и эксплуатации приспособления

Именно такими являются системы «Ардуино». Производитель поставляет абсолютно простые в установке и эксплуатации приспособления.

Контроль и управление климатической системой

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

Основные достоинства данной функции:

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

Принцип работы системы Arduino

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

  • Аналоговые.
  • Цифровые.

Инициировать работу аналоговых портов следует, использовав в загружаемой программе pin-Mode-функцию:

  1. Выбираем номер нужного пина.
  2. Выставляем режим «Приём данных» (OUTPUT) или «Передача данных» (INPUT).

Широтноимпульсные цифровые модуляторы (ШИМ) имеют более интеллектуальный интерфейс, позволяющий им как принимать, так и передавать нужные данные. На плате ШИМ-порты обозначаются тильдой (~) или аббревиатурой PWM. При подключении к плате-контроллеру внешних датчиков и приборов следует учитывать и технические показатели портов. Они способны выдавать:

  • 5 вольт напряжения.
  • 0,02 ампера силы тока.

Если использовать в качестве питающего элемента для платы батарейки или АКБ напряжением свыше 12 вольт, возможен её перегрев и выход из строя. При снижении питающего напряжения до 6-7 вольт наоборот, на выходе порта может оказаться меньше 5В, что, в свою очередь, вызовет сбои в работе. Собранные в единый комплекс устройства, детекторы и датчики передают информацию на процессор Arduino, а оттуда, через подключенный модуль GPS или GSM, отправляется на компьютер или иное управляющее устройство с установленным софтом, принимающее решение о выдаче определённой команды. Это может быть включение-отключение бытового прибора, либо передача данных на мобильное устройство владельца дома.

Особенности проектов

Большинство электронщиков предпочитают создавать свои проекты на основе микроконтроллера Аrduino Uno, о которой и мы писали уже несколько раз.

Для начала стоит познакомиться с функционалом микропроцессора Ардуино уно, на котором строится большинство проектов, а также рассмотреть причины выбора данного приспособления. Ниже описаны факторы, по которым начинающему изобретателю стоит остановиться на Аrduino uno:

  1. Довольно простой в использовании интерфейс. Понятно, где какой контакт, и к чему прикреплять соединительные провода.
  2. Чип на плате подключается прямо к USB-порту. Преимущество этой установки заключается в том, что последовательная связь – это очень простой протокол, который проверен временем, а USB делает соединение с современными компьютерами очень удобным.
  3. Легко найти центральную часть микроконтроллера, которая представляет собой чип ATmega328. Он имеет больше аппаратных функций, таких как таймеры, внешние и внутренние прерывания, пины PWM и несколько режимов ожидания.
  4. Устройство с открытым исходным кодом, поэтому большое количество радиолюбителей могут исправить баги и неполадки в программном обеспечении. Это облегчает отладку проектов.
  5. Тактовая частота равна 16 МГц, что достаточно быстро для большинства приложений и не ускоряет работу микроконтроллера.
  6. Очень удобно управлять мощностью внутри него, и она имеет функцию встроенного регулирования напряжения. Также микроконтроллер можно отключить от USB-порта без внешнего источника питания. Можно подключить внешний источник питания до 12 В. Причем микропроцессор сам определит нужное напряжение.
  7. Наличие 13 цифровых контактов и 6 аналоговых контактов. Эти пины позволяют подключать оборудование к плате Arduino uno со стороннего носителя. Контакты используются в качестве ключа для расширения вычислительной способности Arduino uno в реальном мире. Просто подключите свои электронные устройства и датчики к разъемам, которые соответствуют каждому из этих контактов.
  8. Имеется в наличии разъем ICSP для обхода USB-порта и сопряжения с Arduino напрямую в качестве последовательного устройства. Этот порт необходим, чтобы перезагрузить чип, если он поврежден и больше не может использоваться на вашем компьютере.
  9. Наличие 32 КБ флэш-памяти для хранения кода разработчика.
  10. Светодиод на плате подключается к цифровому контакту 13 для быстрой отладки кода и упрощения этого процесса.
  11. Наконец, у него есть кнопка для сброса программы на чипе.

Arduino был создан в 2005 году двумя итальянскими инженерами – Дэвидом Куартиллесом и Массимо Банзи с целью, чтобы ученики научились программировать микроконтроллер Arduino uno и улучшить свои навыки в области электроники и использовать их в реальном мире.

Arduino uno может воспринимать окружающую среду, получая вход от различных датчиков, и способен влиять на окружающую среду, контролируя свет, двигатели и другие исполнительные механизмы. Микроконтроллер запрограммирован с использованием языка программирования Arduino (на основе проводки) и среды разработки Arduino (на основе обработки).

Что такое Arduino?

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

В основе платформы лежит открытый код, а само устройство построено на печатной плате с «вшитым» в ней программным обеспечением.

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

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

Существует несколько моделей плат, самые распространённые из них – UNO, Mega 2560 R3.

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

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

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

Устройства на Ардуино могут работать в комплексе с ПО на компьютере или самостоятельно.

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

ЧИТАЙТЕ ПО ТЕМЕ: Умный дом Xiaomi Smart Home, обзор, комплектация, подключение и настройка своими руками, сценарии.

Вариометр для параплана своими руками на ардуино

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

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

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

 

Залить прошивку и проверить работоспособность решил сначала на макетной плате. 

Прошивка

Библиотеки работы компонентов:

Библиотека для датчика давления BMP180
Библиотека для работы кнопок Bounce2-master
Еще одна библиотека для работы кнопок SBB_Click
Библиотека для работы ЖК дисплеяLiquidCrystal_I2C_V112
Прошивка версия 1.3

Устанавливаем среду разработки Arduino IDE: https://www.arduino.cc/en/main/software

После установки Arduino IDE, нужно распаковать архивы с библиотеками в: «Program Files\Arduino\libraries».

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

 Корпус прибора

После проверки электроники стал делать корпус из мыльницы.

Крепление прибора — через две проушины.

Всю электронику вместил в мыльницу на термоклей. Потребовалось некоторое усилие, чтобы это сделать. Нужно было оставлять минимальные запасы проводов и брать более гибкие провода, это бы намного облегчило процесс. Я как-то не сообразил сразу, но вы теперь знаете ;)

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

Можно использовать батарейку крона, но я собрал питание на литиевой банке 18650 с платой — преобразователем напряжения до 12 вольт. Такого источника питания хватает на несколько месяцев без подзарядки. Об этом напишу в отдельной статье.

Схема и прошивка были разработаны уважаемым XONIX: https://www.instructables.com/id/DIY-Arduino-Variometer-for-Paragliding-%D0%94%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC-%D0%92%D0%B0%D1%80%D0%B8/

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 написанием которого мы сейчас и займёмся.

Ардуино. Метеостанция на LCD 1602 и DHT11


Ардуино. Метеостанция с дисплеем LCD 1602 и DHT22 После сборки схемы, загрузите в микроконтроллер следующий скетч (здесь ссылка на скачивание архива со скетчем для метеостанции и необходимыми библиотеками). Информация с датчика DHT22 выводиться будет на монитор порта Arduino IDE и на жидкокристаллический дисплей 1602a, для отображения информации использован русский шрифт для LCD и символы (в скетче есть подробные комментарии).

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

#include <Wire.h> // библиотека для протокола IIC #include <LiquidCrystal_I2C.h> // подключаем библиотеку LCD IIC LiquidCrystal_I2C lcd(0x27,20,2); // присваиваем имя lcd для дисплея #include «DHT.h» // подключаем библиотеку для DHT11 DHT dht(2, DHT11); // к какому порту подключаем датчик // создаем символ градуса и присваиваем имя «gradus» byte gradus = { 0b01100,0b10010,0b10010,0b01100,0b00000,0b00000,0b00000,0b00000 }; // создаем русскую букву «П» byte P = { 0b11111,0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000 }; // создаем русскую букву «У» byte Y = { 0b10001,0b10001,0b10001,0b01111,0b00001,0b00001,0b01110,0b00000 }; // создаем русскую букву «Л» byte L = { 0b00111,0b01001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000 }; // создаем русскую букву «Ж» byte ZH = { 0b10101,0b10101,0b10101,0b01110,0b10101,0b10101,0b10101,0b00000 }; // создаем русскую букву «Ь» byte znak = { 0b10000,0b10000,0b10000,0b11110,0b10001,0b10001,0b11110,0b00000 }; void setup() { Serial.begin(9600); // запуск последовательного порта lcd.init(); // инициализация LCD дисплея lcd.backlight(); // включение подсветки дисплея lcd.createChar(1, gradus); lcd.createChar(2, P); lcd.createChar(3, Y); lcd.createChar(4, L); lcd.createChar(5, ZH); lcd.createChar(6, znak); } void loop() { // если нужны точные значение, то используйте float, вместо byte byte h = dht.readHumidity(); // считываем значение температуры byte t = dht.readTemperature(); // считываем значение влажности Serial.print(«Temperature: «); Serial.println(t); // отправляем значение температуры на монитор Serial.print(«Humidity: «); Serial.println(h); // отправляем значение температуры на монитор Serial.println(» «); // пустая строка lcd.setCursor(0,0); // ставим курсор на 1 символ первой строки lcd.print(«TEM»); // используем латинские буквы lcd.print(char(2)); // выводим русскую букву «П» lcd.print(«EPAT»); // используем латинские буквы lcd.print(char(3)); // выводим русскую букву «У» lcd.print(«PA: «); // используем латинские буквы lcd.print(t); // выводим значение температуры на LCD lcd.print(char(1)); // выводим знак градуса lcd.setCursor(2,1); // ставим курсор на 3 символ второй строки lcd.print(«B»); // используем латинские буквы lcd.print(char(4)); // выводим русскую букву «Л» lcd.print(«A»); // используем латинские буквы lcd.print(char(5)); // выводим русскую букву «Ж» lcd.print(«HOCT»); // используем латинские буквы lcd.print(char(6)); // выводим русскую букву «Ь» lcd.print(«: «); // используем латинские буквы lcd.print(h); // выводим значение влажности на LCD lcd.print(«%»); // выводим знак процент delay(1000); }

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

  1. в скетче можно использовать до 8 русских букв и символов, при необходимости заменяйте буквы из кириллицы — латинскими буквами;
  2. скорость обновления данных замените на необходимое значение.

Заключение. Мы рассмотрели, как сделать простую домашнюю метеостанцию на Ардуино c дисплеем 1602а и датчиком температуры и влажности воздуха DHT11. Данный проект можно доработать, добавив к схеме еще больше датчиков для анализа метеоусловий. Также можно сделать беспроводную метеостанцию на Arduino Uno, используя блютуз или радио модули для передачи информации на расстояние.

Печатные платы.

Печатные платы разработаны в программе Dip Trace. Они выполнены на одностороннем фольгированном стеклотекстолите. Расположение деталей на основной печатной плате показано на рисунке (Рисунок 4). На рисунке перемычки со стороны монтажа выделены цветными ломаными линиями. Печатная плата со стороны дорожек показана на рисунке (Рисунок 5).

Рисунок 4. Печатная плата (вид со стороны радиодеталей).

Рисунок 5. Печатная плата (вид снизу, зеркальное отображение).

Кнопки и переключатели пульта управления станцией установлены на отдельной печатной плате (Рисунок 6 и Рисунок 7).

Рисунок 6. Печатная плата Пульта управления (вид сверху).

Рисунок 7. Печатная плата Пульта управления (вид со стороны дорожек).

Гнездо для подключения USB кабеля установлено на отдельной плате, купленной на AliExpress (Рисунок 8).

Рисунок 8. Плата с гнездом USB.

Заключительная часть

Многим начинающим домашним мастерам может показаться, что работать с ардуино очень сложно и этому нужно учиться долгое время. На самом деле стоит только один раз попробовать, чтобы это занятие увлекло человека настолько, что он сам начнёт изобретать различные приборы, требующие наличия подобной микросхемы. Тем более что стоимость необходимых элементов минимальна, а найти в сети нужные скетчи для той или иной цели крайне просто. Что же касается дальномера, то его можно сделать не только ультразвуковым, но и лазерным. Второй вариант будет даже более предпочтительным – всегда можно увидеть, нет ли препятствия на пути луча.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: