Изготовление системы «Умный дом» на технологии Arduino

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

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

В этом уроке объясняется как сделать систему полива растений с сенсорным датчиком и датчиком влажности на основе Arduino Uno.

Статья содержит инструкцию, предназначенную для разработки корпуса под Arduino Nano в программе SolidWorks с последующей 3D-печатью.

Проект Wyliodrng создан для объединения управления вашими платами на расстоянии через интернет с вашего компьютера.

В этом уроке на основе Ардуино и нескольких комплектующих мы сделаем систему контроля качества воздуха внутри помещений.

Остановимся подробнее на том, как контролировать любое электрическое устройство из любого места на Земле с помощью Интернета.

С вами снова Артем Лужецкий и мы продолжаем создавать свой собственный “Умный дом” и на очереди – объединение устройств в сеть, часть 1.

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

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

Связываем Ардуино проекты умного дома с интернетом для передачи данных полученных от разных источников на расстоянии.

Способы беспроводного управления для умного дома и создание систем беспроводного управления с помощью платы Arduino UNO.

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

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

«Умный» дом — что это?

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

В реальности все, конечно, не так волшебно и красочно. Нынешние машины и компьютеры ещё не достигли такого уровня развития. Поэтому функции современного «умного» дома ограничены. К примеру, датчики могут контролировать:

  • Включение-выключение света.
  • Расход энергии.
  • Температуру.
  • Влажность в доме.

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

Технология сборки

«Умный дом» — это всего лишь

контроллеры с датчиками

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

Итак, как сделать свой дом «умным»? Что для этого нужно? Для начала нужно заняться закупкой необходимых контроллеров, которые будет необходимо запрограммировать и наладить. На первый взгляд все достаточно просто, но на самом деле могут возникнуть проблемы с эксплуатацией самой системы, для сборки и управления которой необходимы определённые знания. Поэтому компания Arduino постаралась максимально упростить свою систему, с которой может справиться даже ребёнок.

Что такое система Arduino ?

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

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

Как же работает система Arduino? Очень просто. Установленные по всему дому или квартире датчики считывают информацию об окружающей среде и передают все данные на компьютер, который самостоятельно принимает решения. Функционировать эта система может на компьютере, ноутбуке, планшете или даже телефоне. Все программы для ардуино можно найти в свободном доступе. Все «железо» производитель делает максимально стандартизированным под системные разъёмы.

Функции системы Arduino

Система ардуино для проекта «умного дома» должна выполнять следующие функции:

  • Контроль расхода электроэнергии. В упрощённом варианте система самостоятельно включает и выключает освещение. В более продвинутом варианте система не только выключает освещение после сигнала пульта, но и полностью отключает освещение, если хозяин отсутствует в помещении.
  • Контроль всех входов и выходов помещения. Система ардуино контролирует датчики движения, может автоматически блокировать или закрывать двери, считывает точное количество людей в помещении.
  • Температурный контроль помещения. Система ардуино тесно взаимосвязана с вентиляцией, отоплением и другими климатическими системами. Принцип работы достаточно простой: система автоматически понижает или повышает температуру и другие показатели, что зависит от предварительно заданных параметров.
  • Контроль окружающей среды. Система внимательно следит и оповещает о температуре за окном, осадках (дождь, снег, туман). Это необходимо для того, чтобы человек более рационально планировал свой рабочий день, так как в дождевую погоду на работу добираться сложнее.
  • Пожарная безопасность. В упрощённом варианте система оповещает хозяина о пожаре, наличие дыма в воздухе. В более продвинутом варианте система не только включает оповещение, но и может вызывать соответствующие службы спасения.
  • Автоматическое управление техникой. «Умная система» самостоятельно включает и выключает музыкальные приборы, телевизор, чайник и другие технические приборы.

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

Преимущества

  • Цена.
  • Качество.
  • Удобство.
  • Простота монтажа и проекта в целом.
  • Низкая стоимость в случае поломки или выхода из строя отдельных комплектующих.
  • Доступность программного обеспечения.


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

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

1.Главный модуль

  • Обрабатывает сигналы с радио пультов .
  • Обрабатывает сигналы с  измерительного модуля.
  • Передает полученные команды на компьютер.

#include <RCSwitch.h> // RF подключаем библиатеку
#include <RemoteReceiver.h>
#include <RemoteTransmitter.h>
#include <VirtualWire.h>
RCSwitch mySwitch = RCSwitch(); // RF приёмник
long previousMillis2 = 0; // храним время последнего переключения светодиода
long previousMillis3 = 0; // храним время последнего переключения светодиода
char unitID_in[11]; // Переменные для разбора буфера
char numb_in[14]; // Переменные для разбора буфера
char dat_in[14]; // Переменные для разбора буфера
char ol_in[14]; // Переменные для разбора буфера
unsigned long rf_dt, old_rf;
const int ledPin = 6; // номер выхода, подключенного к светодиоду
int ledState = LOW; // этой переменной устанавливаем состояние светодиода
long previousMillis = 0; // храним время последнего переключения светодиода
long interval = 500; // интервал между включение/выключением светодиода (1 секунда)
char buffer[32];
unsigned long rf2_dt, old_rf2;

void setup()
{
RemoteReceiver::init(1, 3, showCode);
Serial.begin(9600); // Скорость компорта
mySwitch.enableReceive(0); // Приемник RF 0 => это pin #2
pinMode(ledPin, OUTPUT); // задаем режим выхода для порта, подключенного к светодиоду

vw_set_tx_pin(7); // VirtualWire
vw_set_rx_pin(2); // VirtualWire
vw_set_ptt_inverted(true); // VirtualWire
vw_setup(4000); // VirtualWire
vw_rx_start(); // VirtualWire

mySwitch.enableTransmit(7); // Передатчик RF is connected to Arduino Pin #10
mySwitch.setRepeatTransmit(5); // Передатчик RF setRepeatTransmit

Serial.println(» «);
Serial.println(» WELCOME to ADATUM «);
Serial.println(» MAIN MODULE v.0.9 «);
Serial.println(» «);

}

void loop() {

uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if(vw_get_message(buf, &buflen)){ int i; for(i = 0; i < buflen; ++i){ buffer[i] = char(buf[i]);}buffer[i++]=’\0′; Serial.println(buffer); }

int i=0;
if(Serial.available()){delay(100);
while( Serial.available() && i< 99) { buffer[i++] = Serial.read();} buffer[i++]=’\0′;}
if(i>0)
{
sscanf(buffer, «%[^’,’],%[^’,’],%[^’,’],%[^’,’]», &unitID_in, &numb_in, &dat_in, &ol_in);

if ((String)unitID_in == «rn») { vw_setup(0); unsigned long n2; unsigned long m2; n2 = atol(numb_in); m2 = atol(dat_in); RemoteTransmitter::sendCode(7, n2, m2, 5);vw_setup(4000);} //отправляем команду типа rn,177075,126
if ((String)unitID_in == «rf») { vw_setup(0); unsigned long n; unsigned long m; unsigned long g; n = atol(numb_in); m = atol(dat_in); g = atol(ol_in); mySwitch.setPulseLength(g); mySwitch.send(n, m); vw_setup(4000);}
if ((String)unitID_in == «ir») { char sl[32]; sprintf(sl, «ir,%s,%s,%s», numb_in, dat_in, ol_in); vw_send((uint8_t *)sl, strlen(sl)); } //ir,PAN,16825533,16388
if ((String)unitID_in == «id») { char sl[32]; sprintf(sl, «id,send»); vw_send((uint8_t *)sl, strlen(sl)); }
if ((String)unitID_in == «mu») { char sl[32]; sprintf(sl, «mu,%d», numb_in); vw_send((uint8_t *)sl, strlen(sl)); }
if ((String)unitID_in == «re») { char qw[32]; sprintf(qw, «re,%s,%s», numb_in, dat_in); Serial.print(qw); vw_send((uint8_t *)qw, strlen(qw)); }

}

if (mySwitch.available()>0 )
{ rf_dt = mySwitch.getReceivedValue(); unsigned long currentMillis2 = millis(); // Приемник RF
if ((old_rf != rf_dt) || (currentMillis2 — previousMillis2 > 1000))
{
previousMillis2 = currentMillis2; old_rf=rf_dt; Serial.print(«rf,»); Serial.print( mySwitch.getReceivedValue() );
Serial.print(«,»); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print(«,»); Serial.print( mySwitch.getReceivedDelay() );Serial.print(«,»);Serial.print(«0»);Serial.print(«,»);Serial.println(«rf»);

mySwitch.resetAvailable();
}
mySwitch.resetAvailable();
}

unsigned long currentMillis = millis(); if(currentMillis — previousMillis > interval) { previousMillis = currentMillis; if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ledPin, ledState); }

}

void showCode(unsigned long receivedCode, unsigned int period) { rf2_dt = receivedCode; unsigned long currentMillis3 = millis(); if ((old_rf2 != rf2_dt) || (currentMillis3 — previousMillis3 > 500)) {previousMillis3 = currentMillis3; old_rf2=rf2_dt; Serial.print(«rn,»); Serial.print(receivedCode); Serial.print(«,»);Serial.print(period);Serial.print(«,»);Serial.print(«0»);Serial.print(«,»);Serial.print(«0»);Serial.print(«,»);Serial.println(«rn»);} } // Приемник PT2262

2. Измерительный модуль.

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


#include <VirtualWire.h>
#include «DHT.h» // DHT
#include <IRremote.h> // Ir управление
#include <RCSwitch.h> // RF подключаем библиатеку
RCSwitch mySwitch = RCSwitch(); // RF приёмник
DHT dht(6, DHT11); // DHT
long interval = 60000; // интервал между включение/выключением светодиода (1 секунда)
long previousMillis = 0; // храним время последнего переключения светодиода
long previousMillis2 = 0; // храним время последнего переключения светодиода
IRrecv irrecv(8); // Ir управление
decode_results results;
unsigned long ir_dt, old_ir;
unsigned long rf_dt, old_rf;
const int ledPin = 13; // номер выхода, подключенного к светодиоду
int ledState = LOW; // этой переменной устанавливаем состояние светодиода

long previousMillis3 = 0; // храним время последнего переключения светодиода
char unitID_in[11]; // Переменные для разбора буфера
char numb_in[14]; // Переменные для разбора буфера
char dat_in[14]; // Переменные для разбора буфера
char ol_in[14]; // Переменные для разбора буфера
IRsend irsend; // Ir управление
int sensorPin = A0; // устанавливаем входную ногу для АЦП
int sensorPin2 = A6; // устанавливаем входную ногу для АЦП
unsigned int sensorValue = 0; // цифровое значение фоторезистора
int speakerPin = 4; // Musik
char buffer[32];

void setup()
{

Serial.begin(9600); // Musik
pinMode(ledPin, OUTPUT); // задаем режим выхода для порта, подключенного к светодиоду
pinMode(speakerPin, OUTPUT); // Musik
mySwitch.enableReceive(0); // Приемник RF 0 => это pin #2
dht.begin(); // DHT
irrecv.enableIRIn(); // Start the receiver
mySwitch.enableTransmit(7); // Передатчик RF is connected to Arduino Pin #10
mySwitch.setRepeatTransmit(5); // Передатчик RF setRepeatTransmit

vw_set_tx_pin(7); // VirtualWire
vw_set_rx_pin(2); // VirtualWire
vw_set_ptt_inverted(true); // VirtualWire
vw_setup(4000); // VirtualWire
vw_rx_start(); // VirtualWire

Serial.println(» «);
Serial.println(» WELCOME to ADATUM «);
Serial.println(» RECIVER MODULE v.0.9 «);
Serial.println(» «);

}

void loop()
{

uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; // VirtualWire

if(vw_get_message(buf, &buflen)){int i; for(i = 0; i < buflen; ++i){ buffer[i] = char(buf[i]);}buffer[i++]=’\0′;

sscanf(buffer, «%[^’,’],%[^’,’],%[^’,’],%[^’,’]», &unitID_in, &numb_in, &dat_in, &ol_in);

if ((String)unitID_in == «id») {

int s = analogRead(sensorPin2); int k = analogRead(sensorPin); int h = dht.readHumidity(); int t = dht.readTemperature();
char meteo[32]; sprintf(meteo, «id,0001,%d,%d,%d,%d,id», t,h,k,s);
Serial.print(«send: «); Serial.println(meteo); vw_send((uint8_t *)meteo, strlen(meteo));
}
if ((String)unitID_in == «mu») {int length = 5; int tempo = 10; char notes[] = «cgcgc»; int beats[] = {1,1,1,1,1}; for (int i = 0; i < length; i++) {if (notes[i] == ‘ ‘) {delay(beats[i] * tempo);} else {playNote(notes[i], beats[i] * tempo);}delay(tempo/2);}Serial.println(«MUSIC»);}
if ((String)unitID_in == «ir»)
{
Serial.print(«recive: «); Serial.print(buffer);

if ((String)numb_in == «nec») { vw_setup(0); int long bits2 = atol(dat_in); int long value2 = atol(ol_in); irsend.sendNEC(bits2, value2); Serial.print(«send: «); Serial.print(«nec,»); Serial.println(bits2); vw_setup(4000); }
if ((String)numb_in == «sony»){ vw_setup(0); int long bits4 = atol(dat_in); int long value4 = atol(ol_in); irsend.sendSony(bits4, value4); Serial.print(«send: «); Serial.print(«sony,»);Serial.println(bits4); vw_setup(4000); }
if ((String)numb_in == «rc5») { vw_setup(0); int long bits5 = atol(dat_in); int long value5 = atol(ol_in); irsend.sendRC5(bits5, value5); Serial.print(«send: «); Serial.print(«rc5,»); Serial.println(bits5); vw_setup(4000); }
if ((String)numb_in == «rc6») { vw_setup(0); int long bits6 = atol(dat_in); int long value6 = atol(ol_in); irsend.sendRC6(bits6, value6); Serial.print(«send: «); Serial.print(«rc6,»); Serial.println(bits6); vw_setup(4000); }
if ((String)numb_in == «jvc») { vw_setup(0); int long bits7 = atol(dat_in); int long value7 = atol(ol_in); irsend.sendJVC(bits7, value7, 0); Serial.print(«send: «); Serial.print(«jvc,»); Serial.println(bits7); vw_setup(4000); }
if ((String)numb_in == «pan») { vw_setup(0); int long bits3 = atol(dat_in); int long value3 = atol(ol_in); irsend.sendPanasonic(value3,bits3); Serial.print(«send: «); Serial.print(«pan,»); Serial.println(bits3); vw_setup(4000); }
}

irrecv.enableIRIn();
}

if (irrecv.decode(&results)) {
if (results.value > 0 && results.value < 0xFFFFFFFF) {
int count = results.rawlen;
if (results.decode_type == NEC) { char text2[32]; sprintf(text2, «ir,nec,%ld,%d,0,ir», results.value, results.bits); Serial.print(«reciv:»);Serial.println(text2); vw_send((uint8_t *)text2, strlen(text2)); }
else if (results.decode_type == SONY) { char text4[32]; sprintf(text4, «ir,sony,%ld,%d,0,ir», results.value, results.bits); Serial.print(«reciv»);Serial.println(text4); vw_send((uint8_t *)text4, strlen(text4)); }
else if (results.decode_type == RC5) { char text5[32]; sprintf(text5, «ir,rc5,%ld,%d,0,ir», results.value, results.bits); Serial.print(«reciv»);Serial.println(text5); vw_send((uint8_t *)text5, strlen(text5)); }
else if (results.decode_type == RC6) { char text6[32]; sprintf(text6, «ir,rc6,%ld,%d,0,ir», results.value, results.bits); Serial.print(«reciv»);Serial.println(text6); vw_send((uint8_t *)text6, strlen(text6)); }
else if (results.decode_type == JVC) { char text7[32]; sprintf(text7, «ir,jvc,%ld,%d,0,ir», results.value, results.bits); Serial.print(«reciv»);Serial.println(text7); vw_send((uint8_t *)text7, strlen(text7)); }
else if (results.decode_type == PANASONIC){ char text3[32]; sprintf(text3, «ir,pan,%ld,%d,0,ir», results.value, results.panasonicAddress); Serial.print(«reciv»);Serial.println(text3); vw_send((uint8_t *)text3, strlen(text3)); }

}
irrecv.enableIRIn();
}

if (mySwitch.available()>0 )
{ rf_dt = mySwitch.getReceivedValue(); unsigned long currentMillis2 = millis(); // Приемник RF
if ((old_rf != rf_dt) || (currentMillis2 — previousMillis2 > 1000)) { previousMillis2 = currentMillis2; old_rf=rf_dt;
Serial.print(«reciv: «); Serial.print(«rf,»);
Serial.print( mySwitch.getReceivedValue() ); Serial.print(«,»); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print(«,»); Serial.print( mySwitch.getReceivedDelay() );
int long n = mySwitch.getReceivedValue(); int m = mySwitch.getReceivedBitlength(); int g = mySwitch.getReceivedDelay();
vw_setup(0); // VirtualWire
mySwitch.setPulseLength(g-58); mySwitch.send(n, m);
vw_setup(4000); // VirtualWire
char sl[32]; sprintf(sl, «%ld,%d,%d», n, m, g);Serial.print(» -> send: «);Serial.println(sl);
mySwitch.resetAvailable();} mySwitch.resetAvailable();
}

unsigned long currentMillis = millis(); if(currentMillis — previousMillis > interval) {

previousMillis = currentMillis;

int s = analogRead(sensorPin2); int k = analogRead(sensorPin); int h = dht.readHumidity(); int t = dht.readTemperature();
char meteo[32]; sprintf(meteo, «id,0001,%d,%d,%d,%d,id», t,h,k,s);
Serial.print(«send: «); Serial.println(meteo); vw_send((uint8_t *)meteo, strlen(meteo));

if (ledState == LOW) ledState = HIGH; else ledState = LOW; digitalWrite(ledPin, ledState); }

}

void playTone(int tone, int duration){for (long i = 0; i < duration * 1000L; i += tone * 2) {digitalWrite(speakerPin, HIGH); delayMicroseconds(tone); digitalWrite(speakerPin, LOW); delayMicroseconds(tone); }}
void playNote(char note, int duration){char names[]={‘c’,’d’,’e’,’f’,’g’,’a’,’b’,’C’}; int tones[]={1915,1700,1519,1432,1275,1136,1014,956}; for (int i=0; i<8; i++) {if (names[i] == note){playTone(tones[i], duration);}}}

По коду думаю у вас не возникнет вопросов, основные моменты прокомментированы. Все таки если возникают вопросы пишем не стесняемся, буду рад ответить.
В проекте использованы библиотеки.

  • IRremote * Version 0.1 July, 2019 * Copyright 2019 Ken Shirriff.
  • Virtual Wire implementation for Arduino Author: Mike McCauley ([email protected]) Copyright (C) 2019 Mike McCauley.
  • DHT library written by Adafruit Industries.
  • RCSwitch Suat Цzgьr. Contributors: — Andre Koehler / info(at)tomate-online(dot)de — Gordeev Andrey Vladimirovich.
  • RemoteSwitch library v2.3.0 DEV made by Randy Simons.

Обратите внимание ⇩



‘);
$(‘#alldata’).live(‘click’, function() {
$(popoup).html(json.html.main + json.html.additional);
$(popoup).css(‘top’, ‘-‘ + ($(popoup).height() + 16) + ‘px’);
scrollIntoViewIfOutOfView(popoup);
});

} else {
$(popoup).html(json.message);
}
$(popoup).css(‘top’, ‘-‘ + ($(popoup).height() + 16) + ‘px’);
scrollIntoViewIfOutOfView(popoup);
}
});
}

function printResistor(elem, value) {

$(elem).parent().css(‘position’, ‘relative’);
$(‘.popup-element’).remove();

var popoup = document.createElement(‘div’);
popoup.className = ‘popup-element’;
$(popoup).html(‘Пожалуйста, подождите…’);

$(elem).parent().append(popoup);
$(popoup).css(‘top’, ‘-‘ + ($(popoup).height() + 16) + ‘px’);

var data = ‘value=’ + encodeURIComponent(value);

$.ajax({
url: ‘/cms/index.php?q=resistorcolor/’,
data: data,
type: ‘post’,
dataType: ‘json’,
success: function(json) {

if (json.success) {
$(popoup).html(json.message);
} else {
$(popoup).html(json.message);
}
$(popoup).find(‘img’).load(function() {
$(popoup).css(‘top’, ‘-‘ + ($(popoup).height() + 16) + ‘px’);
});
$(popoup).css(‘top’, ‘-‘ + ($(popoup).height() + 16) + ‘px’);
scrollIntoViewIfOutOfView(popoup);
}
});
}

$(document).ready(function() {
$(‘.popup-close’).live(‘click’, function() {
$(‘.popup-element’).remove();
});
});

В данном проекте я покажу, как построить умный дом. Он может контролировать температуру снаружи и внутри помещения, фиксировать открыто или закрыто окно, показывать, идет ли дождь, а также подавать тревожный сигнал, когда сработает датчик движения PIR. Я создал приложение на ОС Android для отображения всех данных (данные можно также просматривать через браузер). Вы сможете видеть температуру в вашем доме и другую информацию с любой точки мира! Приложение переведено на английский и польский язык. Я создал данное устройство, поскольку хотел иметь свой собственный умный дом, которым можно управлять. Вы также сможете построить умный дом из компонентов, рекомендованных ниже. Тогда приступим.

Объяснение сокращений для начинающих:

GND — земля
VCC — питание
PIR – датчик движения

Шаг 1: Компоненты

Стоимость всех компонентов не превышает $90

  • Arduino
  • ethernet модуль ENC28J60
  • Датчик температуры DS18B20 x 2 штуки
  • Микрофонный модуль
  • Датчик дождя
  • PIR — датчик движения
  • Язычковый переключатель
  • Реле
  • Резистор 4.7 кОм
  • Кабель, витая пара
  • ethernet кабель
  • инструменты (паяльник, отвертка)

Шаг 2: Соединения

Схема соединений показана выше.

Шаг 3: Программный код

Сначала вам необходимо загрузить, разархивировать и импортировать данную библиотеку в среду разработки Arduino IDE. Далее потребуется загрузить данную программу в Arduino. В комментариях объясняется программный код.

Шаг 4: Принцип работы

Если вы нажмете на кнопке refresh (обновить) в вашем приложении или в браузере, то Arduino отправит данные в смартфон/браузер. Приложение получает программный код с каждой страницы ( /tempin, /tempout, /rain, /window, /alarm) и отображает его на вашем смартфоне.

Шаг 5: Приложения для Android.

Для установки приложения на вашем смартфоне под управлением ОС Android вам необходимо выполнить следующее (это видно на картинках выше):

1. Сначала загрузите файл smartHome.apk

2. Отправьте файл apk на ваш телефон
3
. Откройте файловый менеджер и разместите файл smarthHome.apk
4. Щелкните на нем и нажмите установить (вам необходимо установить галочку, которая разрешает устанавливать приложения вне маркета google play)
5
. После установки вам необходимо активировать приложение

Шаг 6: Конфигурирование приложения

Я кратко объясню, как работает приложение. Оно отображает все данные из вашего дома. Вы можете нажать на иконку настроек для редактирования вашего IP адреса, и включать и выключать тревожную сигнализацию. Когда вы включаете сигнализацию, то приложение получает данные от активного датчика движения PIR. Если датчик определяет постороннее движение в доме, он посылает уведомление. Приложение получает данные от датчика каждую минуту. В поле IP введите ваш IP-адрес.

Шаг 7: Браузер

Введите в адресной строке браузера ваш ip адрес / all. При этом вы увидите все данные и сможете включать и выключать свет.

Для этих функций вы также можете использовать приложение на Android.

Шаг 8: Переадресация портов

Вам нужно открыть порт на вашем роутере. Войдите в конфигурацию роутера, установите адрес arduino ip и откройте порт 80. Процедура показана на картинке выше.

Шаг 9: Присвоение доменного имени NO IP (опция)

Вы можете настроить учетную запись на no ip, но это не обязательно. На картинке выше показан процесс конфигурации.

Шаг 10: Тестирование

Если вы хотите видеть данные на вашем компьютере, то в адресной строке браузера введите ваш ip адрес / all (напр., 12.345.678.901/all) или используйте приложение Android.

Шаг 11: Редактирование: исходная программа приложения Android app

Ниже указан исходный программный код для Android.

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

Оригинал статьи

Теги:

Вознаградить

Я собрал
0

2

x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография

Средний балл статьи: 3.3
Проголосовало: 2 чел.