Вентилятор 220В
- Войдите на сайт для отправки комментариев
Собственно т.к. потихоньку становится жарко решил заюзать одну из ардуин под вентилятор 220В через реле с управлением через приложение андроид или через браузер.
Проблема возникла вот в чем, при использовании реле с нагрузкой 12В через браузер и приложение всё нормально включается и выключается, а при подключении вентиля 220В начинаются лаги, в виде бесконечного ответа сервера на одну из команд, т.е. после включения или выключения из браузера идет постоянная передача данных, помогает только принудительная перезагрузка страницы и повторный выбор вкл/выкл, если не перезагружать, то ничего не переключается.
При нагрузке 12 вольт никакой длительной передачи, отметил или снял галку и моментально страница обновляется с установленной галкой или нет, в зависимости от запроса.
Скетч использую примитивный из примера управлением реле с помощью езернет шилда, немного подправленный под себя, посмотрите, может где накосячил...
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192, 168, 0, 105 }; EthernetServer server(80); int numPins = 1; int pins[] = { 2 }; // Пин для реле int pinState[] = {1}; // Состояние пинов void setup() { // Изначально выключаем реле for (int i = 0; i < numPins; i++) { pinMode(pins[i], OUTPUT); digitalWrite(pins[i], 1); } Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { // Проверяем подключен ли клиент к серверу while (client.connected()) { // Проверяем идет ли запрос к серверу int dataCount = client.available(); if (dataCount > 0) { // Считываем данные передаваемые серверу с клиента (броузера) for (int i = 0; i < dataCount; i++) { char ch = client.read(); // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P' if (i == 0 && ch != 'P') break; if (ch == '\n' && i < dataCount - 1) { // Находим строку, в которой содержатся передаваемые данные char chNext = client.read(); // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле) if (chNext == 'r') { // Выключаем реле pinState[0] = 0; // Считываем первый номер реле, который нужно включить char relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); // Считываем вспомогательную информацию (=on&) relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); // Пока есть данные об остальных реле, считываем и заносим в массив pinState while (relayNum != -1) { relayNum = client.read(); relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); } } else { // Если не было передано данных, то выключаем все реле pinState[0] = 0; } } } } // В соответствие с переданными данными включаем реле for (int i = 0; i < 4; i++) { digitalWrite(pins[i], !pinState[i]); } // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html ; charset=utf-8"); client.println(); client.println("<html>"); client.println("<head>"); client.println("<title>...</title>"); client.println("</head>"); client.println("<body>"); client.println("<center><h3>...</h3></center>"); client.println("<center><img src=...></center>"); client.println("<form method='post'>"); client.print("<center>Вентилятор</center>"); client.println("<br/>"); client.print("Управление<input type='checkbox'"); if (pinState[0] == 1) client.print("checked"); client.println(" name='r0'></div>"); client.println("<br/>"); client.println("<br/>"); client.println("<input type='submit' value='Вкл/Выкл'>"); client.println("<br/>"); client.println("<br/>"); client.println(""); client.println("<br/>"); client.println("<br/>"); client.println("..."); client.println("</form>"); client.println("</body>"); client.println("</html>"); client.stop(); } } }