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). Проблема именно в одновременном входе (я так понимаю, один ПК "занимает" какую-либо картинку во время загрузки, и второй ПК до неё "достучаться" не может). Если полностью загрузить страничку сначала на одном ПК, потом на другом, то проблем нет.
Возможно ли реализовать что-то навроде такой проверки в прошивке Ардуино: "Если картинка уже загружается каким-то устройством (занята), то подождать и повторить попытку через секунду, если снова занята, то опять повторить попытку через секунду (но всего не более пяти секунд, скажем)". Сразу думается о цикле, но вот что в него вложить?
тема супер!только как всегда проблемка работает только первый скетч остальные чистая страница.пишет не достаточно памяти .флешки ставил разные не помогает.помогите разобратся очень надо !!!!!!!
Прошу прощения еще раз... Помогите новичку в этом деле , тыкните носом... проект классный проблем с повторением нет но вопрос в другом: хочу за место датчика дыма прикрутить датчик DS18B20..... Где что подправить или исправить и что добавить. За ранее благодарю!
Здравствуйте. Статья очень понравилась. Но из-за нехватки опыта пока трудно во всем разобраться. Не могли бы вы сделать коротенькую статью об "Управлении мощьностью" с помощью WEB сервера. Желательно чтобы была самая суть процесса передачи значений от ползунка на вэб страничке к плате ардуино (любому выводу шим). Ну т.е. самый простой ползунок без всяких доп файлов стилей и index.html. Чтобы можно было понять суть. А то код довольно громоздкий. Желательно даже без датчиков и управления реле, только 1(ну или 2 канала) Шим канал
Ответ: Я бы Вам помог, но автор кода более не может никому помогать.
FLProg тоже работаю но код очень большой и не поместиться на ардуинку , щас работаю с маленьким проектом прешлось использовать Due что бы все уместить , авторизацию могу скинуть , моя но работает 100% )