2015-12-04 в 21:49 (последнее изменение 2023-11-09 в 12:25)
Это было в наших планах. Предыдущая часть требовала продолжения На форуме наши читатели просили сделать систему управления нагрузками с веб страницы нашей метеостанции, что собственно вам сейчас и предлагаем.
Как заметили, наша страница в браузере теперь имеет другое название. Ведь это уже не совсем Arduino WEB-метеостанция. Но вы можете сами это изменить. Показания датчиков MQ-2 и DHT-11 осталось не тронутым. А уже ниже расположились наши кнопки управления четырех реле (у меня не было реле, вместо этого установил пару светодиодов).
Но просто сделать обычные кнопки не интересно. По этому сделали активные кнопки "Хамелеоны" которые меняют свой цвет в зависимости от состояния пина. Если кнопка зеленая то пин активен, если красный - не активен. Обновляется страница как мы помним из предыдущих частей данного проекта, один раз в секунду. Так что не стоит паниковать если кнопка у вас изменит цвет не сразу.
Давайте разберемся как сделать красивые кнопочки.
За их дизайн будут отвечать пару строк в файле my.css. Стиль кнопки в отключенном состоянии будет такой:
Код
.button_disabled {color: #fff; /* цвет текста */
background: rgb(212, 75, 56);/* фон кнопки */
border: none; /* не показывать границу */
border-radius:5px; /* закругление углов */
cursor: pointer /* ставим другой курсор */
}
.button_disabled:hover {background: rgb(232, 95, 76);}/* при наведении курсора мышки */
.button_disabled:active {background: rgb(152, 15, 0);}/* при нажатии */
Стиль кнопки во включенном состоянии будет немного другой:
Код
.button_enabled {color: #000; /* цвет текста */
background: rgb(17,237,105); /* фон кнопки */
border: none; /* не показывать границу */
border-radius:5px; /* закругление углов */
cursor: pointer /* ставим другой курсор */
}
.button_enabled:hover { background: rgb(94,242,153); } /* при наведении курсора мышки */
.button_enabled:active { background: rgb(84,184,124); } /* при нажатии */
Как заметили, отличаются только цветом. Как видите в комментариях, вы можете легко поправить под свой нрав. Вдруг вам не нравится красный цвет...
Тогда файл стилей my.css нашей страницы будет иметь следующее содержание:
Не забывайте, что файл необходимо сохранить в кодировке "utf-8",
Настало время нарисовать окончательную схему нашего проекта. (Извините за пэинт, нарисуете лучше, буду рад выложить=))
Пояснение по схеме. Подключаем это все в плату Ethernet Shield W5100. Он у нас здесь вроде "ломтика сыра", а кусочком хлеба Arduino UNO. Датчик температуры и влажности DHT-11 подключен к цифровому входу 7. Датчик газов и дыма к аналоговому входу А0. Реле управления нагрузками (в моем случае светодиоды) подключаются к цифровым выходам 2, 3, 5, 6.
Датчики как вы понимаете можно цеплять любые. Просто я подключил то, что было под рукой.
Осталось разобраться с прошивкой. Прошивка из предыдущих статей была совсем немного изменена. Что то по отдельности описывать не стану. Вот сразу весь код прошивки.
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}
char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
Видео работы данного проекта.
Архив с картинками для имен датчиков. Скачать.
Файлы "my.css" и "index.htm" все также загружаем в корень карты памяти. Картинки распаковываем и туда же их.
Кстати! Если вы вдруг талантливый веб-дизайнер и можете предложить другой и более правильный вариант оформления страницы, будем рады вас услышать.
З.Ы. Небольшой спойлер. Уже в процессе подготовки интереснейший проект. Он будет для тех, кто бережет свою фигуру либо просто следит за своим весом. Так что ждите, и скоро вы все сами поймете)
З.Ы.Ы. Внесли изменения и дополнения. Теперь с нашей странички можно регулировать мощность с помощью ползунка. Читать.
Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!
Доброго времени суток! Опробовал в сборке это устройство, в оригинале всё работает. Потом захотел я изменить устройство под себя, а именно, мне нужно управлять 24-ю реле, дописал в скетче переменные, в htm файле кнопки, всё откомпилировалось без ошибок и залилось в ардуино (использую mega2560), но при попытке включить реле от 10 до 24, включаются 1 (если включать с 10 по 19) и 2 (если включать с 20 по 24), такое ощущение, что запрос режет длину передаваемой переменной до 1 знака. Подскажите пожалуйста где это исправить. Заранее благодарю.
Доброе время суток. С новым годом. Спасибо отличный проект. Я его переделал под давление, температуру и влажность. В процессе возникла идея, что информация по датчикам как бы не совсем необходима. Интереснее было бы ручное управление нагрузкой а также автоматическое по расписанию, которое выставляется в веб интерфейсе.
arduino 1.6.12 ругается на команды StrContains и StrClear как можно заменить? и можете детальней описать что и как делает какая команда? какой файл как открывает и тому подобное...
Спасибо за статью, делаю сам что то подобно, помогло очень. Есть вопрос, а можно управлять светодиодной лентой с Mega2560 и 5100 на Nano подключенные по nRF24L01 и параллельно иметь возможность управлять этой лентой с Nano через тактовую кнопку? У меня получается что то одно, или с сайта или с кнопки
Спасибо, очень поучительный цикл статей. Отличная работа. Правда у меня всплыл один баг, а именно, если включать "реле" по очереди (№1-№2-№3-№4), то при выключении четвертого, перестает гореть зеленым (становится ненажатой) вторая кнопка, хотя светодиод на данном пине остается гореть. И Это не единственная последовательность при которой слетает индикация включенного "реле". Подскажите, пожалуйста, что происходит в данных строчке кода client.print((digitalRead(2)) ? "1" : "0"); Верно ли я понимаю что это идет опрос состояния пина и его отправка, для того что бы применить тот или иной стиль кнопки? Первый раз такое встретил, синтаксис понять не могу. Знак вопроса заменяет условие? Спасибо