Ethernet shield w5100 регулятор мощности на веб странице
2015-12-13 в 22:42 (последнее изменение 2020-02-16 в 12:11)
Постепенно наша страничка из простой Arduino метеостанции превращается в полноценную систему удаленного управления различными устройствами а так же сбор и вывод информации с датчиков по веб интерфейсу Arduino Web Control. Поможет нам в этом Ethernet Shield W5100 а так же Arduino UNO.
Данная статья является логическим продолжением предыдущего материала где мы установили кнопки управления реле. Думаю у вас не возникло сложностей с повторением, поэтому предлагаю продолжить.
Давайте по кусочкам разберемся.
Html код вызова "ползунка"выглядит так:
Скрипт, который отвечает за работу ползунка и отправку значения исходя из его положения будет следующим:
Код
function PWM(){
value = document.getElementById("led_PWM").value;
var request = new XMLHttpRequest();
request.open("GET", "\setpin?pin=5?value=" + value, false);
request.send(null);
}
Нагрузку подключаем на 9 цифровой выход. На плате даже есть подсказка в виде "~" что означает что вывод поддерживает широтно-импульсную модуляцию.
В прошивке указываем 9 пин как цифровой выход.
Код
pinMode(9, OUTPUT);
Эти строки в прошивке отвечают за управление регулятором мощности (в моем случае) яркостью светодиода. Работает благодаря ШИМ.
Код
else if (StrContains(HTTP_req,"setpin?pin=5")) {
String input = HTTP_req;
int posStart = input.indexOf("value=");
int posEnd = input.indexOf(' ',posStart);
String param = input.substring(posStart+6,posEnd+1);
pin5 = param.toInt();
analogWrite(9,pin5);
sendBaseAnswer(client);
}
Так же решил изменить немного оформление странички. Теперь ведь это уже не совсем метеостанция как определили в начале.
Добавили стиль для тега "<h2>". Он будет применяться для названий строк функций.
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 sendBaseAnswer(EthernetClient client) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
}
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;
}
Файлы "index.htm" и "my.css" загружаем в корень карты памяти. Index.htm сохраняем в кодировке utf-8! Так же и файлами картинок. Они в архиве. Его распаковываем и так же в корень карты.
В качестве удаленно управляемых устройств вы можете использовать различные светильники, вентиляторы и прочее. Только нужно будет устанавливать модуль реле. В случае с регулятором мощности, можно использовать как полевые транзисторы так и симисторы. Все зависит от регулируемого напряжения. Можно регулировать яркость свечения к примеру светильника, люстры в комнате, вентилятора или светодиодной ленты. Ну вам виднее где вы его сможете применить.
Все названия кнопок и остального вы легко можете поменять на свои. Так же и с регулятором мощности. Изменяйте названия в файле "index.htm".
UPD.15.01.2016
Был произведен рефакторинг, что позволило сэкономить 6% объема памяти Ардуино.
Рефакторинг — это процесс улучшения написанного ранее кода путем такого изменения его внутренней структуры, которое не влияет на внешнее поведение.
Вот собственно и измененный код. Никаких доп функций здесь нет, только лишь код стал короче.
Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!
Ну и вопросик а W5100 чисто в теории... если со стороны шилда установить пару кнопок чтобы их состояние отображалось в интерфейсе..? Что бы отобразить работу кода:
007_1 Да при старте все включаются как и у вас при стоке, вы указали часть кода, не могу понять вместо pinMode(2, OUTPUT); Если не затрудни укажите номер строки или чуть больше участок кода чтобы сорентироватся
СпамВиталий 2016-02-20 20:01Не работает в браузере открывается чистая страница и только фавикон отображается правиль ОТВЕТ: Всё дела в том, что Вы возможно просто создали в windowc текстовый (блокнот) и просто его переименовали, но на win 7 это не работает так расширение не устанавливается, я делал через Notepad++ и файлы даже по другому выглядят (Фото Не вставляется)
Ещё один вопрос, регулировка мощности работает так: когда ползунок с левой стороны - светодиод светится ярче когда с правой - тусклеет Как поменять местами? Чтобы когда ползунок слева светодиод светился тусклее, когда справа ярче. Заранее благодарю за ответ.
Ответ Автора: Проверяйте что собрали, должно то все правильно работать
Здравствуйте, после включения Arduino сразу появляется напряжение на пинах управления реле и реле естественно оказываются во включённом состоянии. Как сделать, чтобы после включения/загрузки Arduino реле не включались, а включались только после подачи команды?
Ответ Автора: Насколько я помню, начальное состояние на реле было 0, тоесть выключен.
Хотя нет, вру пожалуй. Дело скорее всего в том, что сервер не понимает, какой пользователь к нему обращается. Наверное, как кто-то писал выше, нужна авторизация пользователей.
Всем привет. Очень классные статья и проект, с удовольствием повторил под датчики DS18B20 и BMP280. Но имеется такая проблема: при одновременной попытке зайти на страничку Web-метеостанции (например, с двух ПК) на одном из компьютеров не прогружаются некоторые картинки (а иногда и файл CSS). Проблема именно в одновременном входе (я так понимаю, один ПК "занимает" какую-либо картинку во время загрузки, и второй ПК до неё "достучаться" не может). Если полностью загрузить страничку сначала на одном ПК, потом на другом, то проблем нет.
Возможно ли реализовать что-то навроде такой проверки в прошивке Ардуино: "Если картинка уже загружается каким-то устройством (занята), то подождать и повторить попытку через секунду, если снова занята, то опять повторить попытку через секунду (но всего не более пяти секунд, скажем)". Сразу думается о цикле, но вот что в него вложить?
виктор2017-04-17 23:25
тема супер!только как всегда проблемка работает только первый скетч остальные чистая страница.пишет не достаточно памяти .флешки ставил разные не помогает.помогите разобратся очень надо !!!!!!!
Прошу прощения еще раз... Помогите новичку в этом деле , тыкните носом... проект классный проблем с повторением нет но вопрос в другом: хочу за место датчика дыма прикрутить датчик DS18B20..... Где что подправить или исправить и что добавить. За ранее благодарю!
Здравствуйте. Статья очень понравилась. Но из-за нехватки опыта пока трудно во всем разобраться. Не могли бы вы сделать коротенькую статью об "Управлении мощьностью" с помощью WEB сервера. Желательно чтобы была самая суть процесса передачи значений от ползунка на вэб страничке к плате ардуино (любому выводу шим). Ну т.е. самый простой ползунок без всяких доп файлов стилей и index.html. Чтобы можно было понять суть. А то код довольно громоздкий. Желательно даже без датчиков и управления реле, только 1(ну или 2 канала) Шим канал
Ответ Автора: Я бы Вам помог, но автор кода более не может никому помогать.
Народ подскажите как за место датчика дыма подключить датчик температуры lm335?
Th3-NINjA2017-02-06 15:16
щас хочу полностью перейти на SD и WEB под RasPi
Ответ Автора: Скидывайте и мы с удовольствием разместим Ваш вариант на сайте.
Th3-NINjA2017-02-06 15:15
FLProg тоже работаю но код очень большой и не поместиться на ардуинку , щас работаю с маленьким проектом прешлось использовать Due что бы все уместить , авторизацию могу скинуть , моя но работает 100% )