Как я делал удаленное управление теплом в гараже

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (10) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
zaibatsuhmao
19.01.2017 - 10:11
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
387
Для обогрева своего гаража, я использую 2 "конвектора". Один конвектор включен постоянно на +5 градусов, для поддержания плюсовой температуры, второй "конвектор" включается по необходимости.

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

Как я делал удаленное управление теплом в гараже
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
zaibatsuhmao
19.01.2017 - 10:12
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Что необходимо было купить:
Arduino nano 146 руб

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:13
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Модуль ENC28J60 165 руб

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:14
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Датчик температуры DHT22 151руб

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:14
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Реле 40руб

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:15
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Коротко о подключении всего этого барахла.

Модуль ENC28J60:
VCC к 5V
GND к GND
SCK к Pin 13
SO к Pin 12
ST к Pin 11
CS к Pin 10

Реле:
S к Pin 2
Vcc к 5V
GND к GND

Датчик температуры DHT22:
Vcc к 3.3V
GND к GND
DATA к Pin4

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

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:16
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Скетч получился вот такой:

#include "DHT.h"
#include <EEPROM.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <EtherCard.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // MAC Address должен быть уникальным в локальной сети
static byte myip[] = { 192,168,1,222 }; // Постоянный IP адресс нашей страницы
byte Ethernet::buffer[1000];
BufferFiller bfill;
// Начальные данные
int LedPins[] = {
2,3,5,6,7,8,9};
int t=0;
int h=0;
boolean PinStatus[7];
const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n"
"\r\n"
"<meta charset='UTF-8'>"
"<meta name='viewport' content='width=device-width, initial-scale=1.0'>"
"<meta http-equiv='refresh' content='10'/>";
const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";
const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";
// Подключаем Ethernet порт HR911105A и датчик DHT22
void setup () {
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( "Failed to access Ethernet controller");
ether.staticSetup(myip);
for(int i = 0; i <= 7; i++)
{
pinMode(LedPins[i],OUTPUT);
PinStatus[i]=EEPROM.read(i);
digitalWrite(LedPins[i],PinStatus[i]);
}
dht.begin();
}
// Получаем данные от DHT22
static void ReadDHT22()
{
h = dht.readHumidity();
t = dht.readTemperature();
}
// Оформление Web страницы
static word homePage() {
bfill = ether.tcpOffset();
bfill.emit_p(PSTR("$F"
"<title>Гараж</title>"
"<p style=\"text-align: center;\"><br />Конвектор: <br> <span style=\"font-size: 4em;\"><a href=\"?ArduinoPIN2=$F\">$F</a></span>"),
http_OK,
PinStatus[0]?PSTR("off"):PSTR("on"),
PinStatus[0]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));
bfill.emit_p(PSTR(
"<br><br>Температура: <br> <span style=\"font-size: 4em;\">$D C</span> <br /><br />Влажность:<br> <span style=\"font-size: 4em;\"> $D %</span></p>"),t, h);
return bfill.position();
}
void loop () {
delay(1); // Задержка
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) // check if valid tcp data is received
{
ReadDHT22();
bfill = ether.tcpOffset();
char *data = (char *) Ethernet::buffer + pos;
if (strncmp("GET /", data, 5) != 0) {
bfill.emit_p(http_Unauthorized);
}
else {
data += 5;
if (data[0] == ' ') {
homePage();
}
else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
PinStatus[0] = true;
digitalWrite(LedPins[0],PinStatus[0]);
EEPROM.write(0,PinStatus[0]); // записываем в ячейку EEPROM №0, текущее состояние LedPins[0].
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
PinStatus[0] = false;
digitalWrite(LedPins[0],PinStatus[0]);
EEPROM.write(0,PinStatus[0]);
bfill.emit_p(http_Found);
}
else {
// Page not found
bfill.emit_p(http_Unauthorized);
}
}
ether.httpServerReply(bfill.position()); // send http response
}
}

Коротко о данном скетче:
В память ардуины (EEPROM) сохраняется информация о последнем положении кнопки реле, перебои со светом нам не страшны, положение кнопки всегда отражает реальное состояние реле, не будет такого, что на странице выводится OFF а на самом деле ON.

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

Вызываю страницу по IP адресу, который мы задали в начале скетча: http://192.168.1.222

Получаю страницу с данными:

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:17
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Всё открывается, данные с датчика верные, реле на нажатие кнопки реагирует, положение запоминает.

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

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:17
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Крышка:

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:17
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Процесс печати:

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:18
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Собрал все в корпус, закрепил модули термоклеем:

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:18
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Установил крышку, держится и без шурупов, можно было и не предусматривать отверстия под них.

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:18
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Когда моделировал корпус, особо головой не думал, по этому реле почему-то сделал по середине… Лучше было его разместить с краю. Ну да ладно, и так сойдет…

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:18
Статус: Offline


Весельчак

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

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:19
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Вывел датчик DHT22 примерно на среднюю высоту стены, т.к. конвекторы сильно греют потолок, а пол помещения долго остается прохладным.

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

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:19
Статус: Offline


Весельчак

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

Теперь гараж с домом у нас в одной сети и самое время настроить виртуальный сервер на домашнем роутере.

Прописываем порт который мы открываем например 7777, прописываем IP нашей системы 192.168.1.222, прописываем порт по которому будет доступна наша страница, для доступа из браузера порт 80.

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:19
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
При наличии статического IP адреса от провайдера, наша система теперь доступна откуда угодно по адресу http://нашip:порт

Если провайдер не предоставляет статический IP, можно сделать и другими способами, но для этого потребуется всегда включенный ПК в доме.

У меня есть статика и зарегистрированный домен, к поддомену которого, я привязал свою систему и мне нет необходимости помнить свой IP для доступа к управлению.

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:19
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Не знаю, как на андроиде, а на айфоне можно вывести закладку на экран, она будет доступна как приложение, тем самым мы имеем быстрый доступ к нашей системе без лишних телодвижений и рытья в закладках.

Как я делал удаленное управление теплом в гараже
 
[^]
zaibatsuhmao
19.01.2017 - 10:20
Статус: Offline


Весельчак

Регистрация: 20.05.15
Сообщений: 143
Далее в планах сделать автоматическую вытяжку при большой влажности или задымленности. Задымленность появляется, когда работаешь фрезером или, когда работает лазерный станок.

Спасибо за внимание. Если есть вопросы, готов ответить )
 
[^]
IIodvox
19.01.2017 - 10:20
146
Статус: Offline


Приколист

Регистрация: 15.10.13
Сообщений: 234
ТС пипец
Мажор
 
[^]
karas72
19.01.2017 - 10:20
190
Статус: Offline


Балагур

Регистрация: 19.11.14
Сообщений: 826
Цитата (zaibatsuhmao @ 19.01.2017 - 10:16)
Скетч получился вот такой:

#include "DHT.h"
#include <EEPROM.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#include <EtherCard.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; // MAC Address должен быть уникальным в локальной сети
static byte myip[] = { 192,168,1,222 }; // Постоянный IP адресс нашей страницы
byte Ethernet::buffer[1000];
BufferFiller bfill;
// Начальные данные
int LedPins[] = {
2,3,5,6,7,8,9};
int t=0;
int h=0;
boolean PinStatus[7];
const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n"
"\r\n"
"<meta charset='UTF-8'>"
"<meta name='viewport' content='width=device-width, initial-scale=1.0'>"
"<meta http-equiv='refresh' content='10'/>";
const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";
const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";
// Подключаем Ethernet порт HR911105A и датчик DHT22
void setup () {
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( "Failed to access Ethernet controller");
ether.staticSetup(myip);
for(int i = 0; i <= 7; i++)
{
pinMode(LedPins[i],OUTPUT);
PinStatus[i]=EEPROM.read(i);
digitalWrite(LedPins[i],PinStatus[i]);
}
dht.begin();
}
// Получаем данные от DHT22
static void ReadDHT22()
{
h = dht.readHumidity();
t = dht.readTemperature();
}
// Оформление Web страницы
static word homePage() {
bfill = ether.tcpOffset();
bfill.emit_p(PSTR("$F"
"<title>Гараж</title>"
"<p style=\"text-align: center;\"><br />Конвектор: <br> <span style=\"font-size: 4em;\"><a href=\"?ArduinoPIN2=$F\">$F</a></span>"),
http_OK,
PinStatus[0]?PSTR("off"):PSTR("on"),
PinStatus[0]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));
bfill.emit_p(PSTR(
"<br><br>Температура: <br> <span style=\"font-size: 4em;\">$D C</span> <br /><br />Влажность:<br> <span style=\"font-size: 4em;\"> $D %</span></p>"),t, h);
return bfill.position();
}
void loop () {
delay(1); // Задержка
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) // check if valid tcp data is received
{
ReadDHT22();
bfill = ether.tcpOffset();
char *data = (char *) Ethernet::buffer + pos;
if (strncmp("GET /", data, 5) != 0) {
bfill.emit_p(http_Unauthorized);
}
else {
data += 5;
if (data[0] == ' ') {
homePage();
}
else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
PinStatus[0] = true;
digitalWrite(LedPins[0],PinStatus[0]);
EEPROM.write(0,PinStatus[0]); // записываем в ячейку EEPROM №0, текущее состояние LedPins[0].
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
PinStatus[0] = false;
digitalWrite(LedPins[0],PinStatus[0]);
EEPROM.write(0,PinStatus[0]);
bfill.emit_p(http_Found);
}
else {
// Page not found
bfill.emit_p(http_Unauthorized);
}
}
ether.httpServerReply(bfill.position()); // send http response
}
}

Коротко о данном скетче:
В память ардуины (EEPROM) сохраняется информация о последнем положении кнопки реле, перебои со светом нам не страшны, положение кнопки всегда отражает реальное состояние реле, не будет такого, что на странице выводится OFF а на самом деле ON.

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

Вызываю страницу по IP адресу, который мы задали в начале скетча: http://192.168.1.222

Получаю страницу с данными:

...почувствовал себя ущербным...
 
[^]
Rukozhop
19.01.2017 - 10:21
43
Статус: Offline


И так сойдет!

Регистрация: 23.12.13
Сообщений: 1093
Гараж, понимаю, служит как место небольших мужских утех? beer.gif fucking.gif ganja.gif disco.gif

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

Ну-ну :)
 
[^]
tok166
19.01.2017 - 10:21
209
Статус: Offline


Ярила

Регистрация: 17.03.13
Сообщений: 1554
" но мне лень выходить из дома, поэтому, я по-быстрому накидал в солиде уродца и распечатал его на 3D принтере. "

тут моя челюсть и отвисла.....
 
[^]
СИЛужеNET
19.01.2017 - 10:22
6
Статус: Offline


Ярила

Регистрация: 2.06.15
Сообщений: 3720
karas72 поддерживаю
sad.gif agree.gif
А по теме - заебись! dont.gif bravo.gif

Это сообщение отредактировал СИЛужеNET - 19.01.2017 - 10:23
 
[^]
Goodkat923
19.01.2017 - 10:22
52
Статус: Offline


Метатель бисера

Регистрация: 30.12.14
Сообщений: 235
Оставайся. Будешь нашим гениальным механиком. © bravo.gif bravo.gif

Это сообщение отредактировал Goodkat923 - 19.01.2017 - 10:23
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 47387
0 Пользователей:
Страницы: (10) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх