#1 2016-01-10 21:31:51

z0ri
Участник
Зарегистрирован: 2016-01-10
Сообщений: 19

Управление реле через arduino, enc28j60 и кнопки

Здравствуйте, уважаемые посетители и администраторы форума.

Совсем недавно начал играться с Ардуино и появился вопрос, который не знаю как решить. Опишу всё максимально подробно.

Есть в наличии: 1) Arduino Uno, 2) модуль сети mini enc28j60(в перспективе хочу заменить), 3) плата с двумя реле srd-05vdc-sl-c (использую только одно реле. В перспективе хочу заменить), кнопка тактовая без фиксации.

С горем пополам спустя несколько дней накидал такой скетч:

#include <EtherCard.h>

// разъем CS из модуля сети подключаем к 10-му пину на ардуино
#define CS 10
#define RELAY_PIN 4
#define REQUEST_RATE 5000

// настройки сетевого интерфейса
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 10,36,1,52 };
static byte gwip[] = { 10,36,1,7 };
static byte dnsip[] = { 10,36,1,7 };
static byte hisport[] = { 80 };

char* on  = "ON";
char* off = "OFF";
boolean relayStatus;
char* relayLabel;
char* linkLabel;

byte Ethernet::buffer[700];


// --- begin для кнопки
// задаём константы
const int buttonPin = 2;     // номер входа, подключенный к кнопке
// переменные
boolean lastButton = LOW;      // Переменная для сохранения предыдущего состояния кнопки
boolean currentButton = LOW;   // Переменная для сохранения текущего состояния кнопки
// --- end конец для кнопки

// --- begin для светодиода
const int ledPin =  6;     // номер выхода светодиода на Arduino
boolean ledOn = false;         // Текущее состояние светодиода (включен/выключен)
// --- end для светодиода


void setup () {
// begin  инициируем подключение к локальной сети
  delay(300); 
  if (ether.begin(sizeof Ethernet::buffer, mymac, CS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip);
// end  инициируем подключение к сети

// --- begin для реле
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH); 
  // если надо чтобы при обновлении
  // страницы в браузере реле сразу включалось
  // надо вместо true поставить false
  relayStatus = true;
  relayLabel = off;
  linkLabel = on;
// --- end для реле


// --- begin для кнопки
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT);
// --- end для кнопки

// --- begin для светодиода на 6-ом пине
  // инициализируем пин, подключенный к светодиоду, как выход
  pinMode(ledPin, OUTPUT);
// --- end для светодиода

}


// --- begin сглаживание кнопки
/*
 * функция сглаживания дребезга
 * принимает в качестве аргумента предыдущее состояние кнопки
 * и выдаёт фактическое.
 */
boolean debounce(boolean last)
{
  boolean current = digitalRead(buttonPin);    // Считать состояние кнопки
  if (last != current)                         // Если изменилось ...
{
  delay(5);                                    // ждём 5 мс
  current = digitalRead(buttonPin);            // Считываем состояние кнопки
  return current;                              // Возвращаем состояние кнопки
}
}
// --- end сглаживание кнопки


void loop () {
// --- begin управление по локальной сети
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
 
  if(pos) {    
    if(strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
      relayStatus = false;
      relayLabel = on;
      linkLabel = off;
    } else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
      relayStatus = true;
      relayLabel = off;
      linkLabel = on;
    }
    digitalWrite(RELAY_PIN, relayStatus);

    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html><head></head><body>"
      "<div style='font:bold 14px verdana;text-align:center'>Relay is $S</div>"
      "<a href='<a href="http://10.36.1.52/?OFF" rel="nofollow">http://10.36.1.52/?OFF</a>'>Выключить</a>"
      "<br></br>"
      "<a href='<a href="http://10.36.1.52/?ON" rel="nofollow">http://10.36.1.52/?ON</a>'>Включить</a>"
      
      "</div></div></body></html>"
      ), relayLabel, linkLabel, linkLabel);
     
      ether.httpServerReply(bfill.position());
    }
// --- end управление по локальной сети

// --- begin реакция на нажатие кнопки для реле
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)   // Если нажатие
{
relayStatus = !relayStatus;
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(RELAY_PIN, relayStatus);                 // Изменить статус состояния реле
digitalWrite(ledPin, ledOn);                         // Изменить статус состояния светодиода
// --- end реакция на нажатие кнопки для реле


  }

Что делает скетч:
С кнопки можно включить реле и выключить (кнопку постоянно держать нажатой для этого не нужно-это важный момент). Релюшку так же можно переключать через веб интерфейс. Если я щёлкаю релюшкой через веб-интерфейс, то отрисовывается состояние реле (OFF или ON). Могу переключить реле физической кнопкой, а выключить через web и наоборот. Всё вобщем так, как и надо было. На светодиод на пину №6 можно внимание не обращать - это "муки творчества" :-)

Что должно получиться и не получается сделать:
Надо, чтобы переключая реле, я знал о текущем его состоянии, не зависимо от того переключил я реле с физической кнопки или через веб-интерфейс. Надо чтобы информация о состоянии реле я знал через веб интерфейс модуля enc28j60 на arduino.

Может кто знает как решить задачу?

Заранее благодарен.

#2 2016-01-10 22:12:48

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

z0ri пишет:

Надо чтобы информация о состоянии реле я знал через веб интерфейс модуля enc28j60 на arduino. Может кто знает как решить задачу?

В коде есть состояние реле (boolean relayStatus), вот его-то и надо выводить на веб-страничку как состояние реле. Разве не?

#3 2016-01-10 22:39:38

z0ri
Участник
Зарегистрирован: 2016-01-10
Сообщений: 19

Re: Управление реле через arduino, enc28j60 и кнопки

Йожэг пишет:
z0ri пишет:

Надо чтобы информация о состоянии реле я знал через веб интерфейс модуля enc28j60 на arduino. Может кто знает как решить задачу?

В коде есть состояние реле (boolean relayStatus), вот его-то и надо выводить на веб-страничку как состояние реле. Разве не?

Возможно. Как ?

#4 2016-01-10 22:57:38

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Да вроде бы в коде и так всё есть. Остаётся только добавить ссылку для проверки статуса, как-то так:

    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html><head></head><body>"
      "<div style='font:bold 14px verdana;text-align:center'>Relay is $S</div>"
      "<a href=\"http://адрес/?OFF\" rel=\"nofollow\">Turn Off</a>"
      "<br></br>"
      "<a href=\"http://адрес/?ON\" rel=\"nofollow\">Turn On</a>"
      "<br></br>"
      "<a href=\"http://адрес/\" rel=\"nofollow\">Check Status</a>"
      "</div></div></body></html>"
      ), relayLabel);

#5 2016-01-10 22:59:52

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Только relayLabel формировать не в привязке к каким-то дополнительным условиям, а по значению relayStatus.

#6 2016-01-10 23:15:33

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

А ещё лучше -- для упрощения [понимания] логики программы советую сделать специальную подпрограмму (функцию) с именем setRelayState(boolean relayOn), в которую поместить включение/выключение реле (и светодиода), а также изменение той самой relayLabel. Далее эту setRelayState(..) нужно вызывать и из "веб сервера", и из обработчика кнопки, и из начальной настройки. Отовсюду. Для кнопки будет "setRelayState(!relayStatus);", для веб - "setRelayState(true);" и "setRelayState(false);".

#7 2016-01-10 23:26:53

z0ri
Участник
Зарегистрирован: 2016-01-10
Сообщений: 19

Re: Управление реле через arduino, enc28j60 и кнопки

Йожэг пишет:

Только relayLabel формировать не в привязке к каким-то дополнительным условиям, а по значению relayStatus.

Запутался. roll
Добавленную Вами строку кода:

"<a href=\"http://адрес/\" rel=\"nofollow\">Check Status</a>"

форум исправил так, как ему захотелось.
строка
), relayLabel, linkLabel, linkLabel);
сократилась до:
), relayLabel);
Вот все различия, которые я смог проследить.
Сразу извиняюсь за нулевые знания в написании под Ардуину, если бы знал где подсмотреть этот кусок кода, возможно и не тревожил бы никого.

#8 2016-01-11 00:23:39

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Та это не форум, это я упростил:

#include <EtherCard.h>

// разъем CS из модуля сети подключаем к 10-му пину на ардуино
#define CS 10
#define REQUEST_RATE 5000

// входы и выходы
#define BUTTON_PIN 2
#define RELAY_PIN 4
#define LED_PIN 6

// настройки сетевого интерфейса
#define MY_IP "192.168.0.55"
static byte myip[] = { 192,168,0,55 };
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte gwip[] = { 192,168,0,1 };
static byte dnsip[] = { 8,8,8,8 };
static byte hisport[] = { 80 };

byte Ethernet::buffer[700];

boolean relayStatus;
char* relayLabel;

// для кнопки
boolean lastButton = LOW;      // Переменная для сохранения предыдущего состояния кнопки
boolean currentButton = LOW;   // Переменная для сохранения текущего состояния кнопки


void setup () {
  // инициируем подключение к локальной сети
  delay(300); 
  if (ether.begin(sizeof Ethernet::buffer, mymac, CS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip);

  // настройка входов/выходов
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);

  // включение реле
  setRelayState(true);
}

/*
 * функция сглаживания дребезга
 * принимает в качестве аргумента предыдущее состояние кнопки
 * и выдаёт фактическое.
 */
boolean debounce(boolean last) {
  boolean current = digitalRead(BUTTON_PIN);   // Считать состояние кнопки
  if (last != current) {                       // Если изменилось ...
    delay(5);                                  // ждём 5 мс
    current = digitalRead(BUTTON_PIN);         // Считываем состояние кнопки
    return current;                            // Возвращаем состояние кнопки
  }
}

void setRelayState(boolean relayOn) {
  digitalWrite(RELAY_PIN, relayOn);
  digitalWrite(LED_PIN, relayOn);
  if (relayOn) {
    relayLabel = "ON";
  } else {
    relayLabel = "OFF";
  }
  relayStatus = relayOn;
}

void loop () {
  // управление по локальной сети
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  if (pos) {
    if (strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
      setRelayState(true);
    } else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
      setRelayState(false);
    }
    // выдать веб-интерфейс
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html>\n<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"
      MY_IP
      "/\"></head>\n<body>\n<center>Relay is $S</center>\n"
      "<a href=\"http://"
      MY_IP
      "/?OFF\" rel=\"nofollow\">Turn Off</a><br></br>\n"
      "<a href=\"http://"
      MY_IP
      "/?ON\" rel=\"nofollow\">Turn On</a><br></br>\n"
      "<a href=\"http://"
      MY_IP
      "/\" rel=\"nofollow\">Check Status</a><br>\n"
      "</body>\n</html>\n"
      ), relayLabel);
      ether.httpServerReply(bfill.position());
  }

  // реакция на нажатие кнопки для реле
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH) { // если нажатие
    setRelayState(!relayStatus);
  }
  lastButton = currentButton;
}

Редактировался Йожэг (2016-01-11 23:25:51)

#9 2016-01-11 20:12:55

z0ri
Участник
Зарегистрирован: 2016-01-10
Сообщений: 19

Re: Управление реле через arduino, enc28j60 и кнопки

Йожэг пишет:

Та это не форум, это я упростил:

#include <EtherCard.h>

// разъем CS из модуля сети подключаем к 10-му пину на ардуино
#define CS 10
#define REQUEST_RATE 5000

// входы и выходы
#define BUTTON_PIN 2
#define RELAY_PIN 4
#define LED_PIN 6

// настройки сетевого интерфейса
#define MY_IP "192.168.0.55"
static byte myip[] = { 192,168,0,55 };
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte gwip[] = { 192,168,0,1 };
static byte dnsip[] = { 8,8,8,8 };
static byte hisport[] = { 80 };

byte Ethernet::buffer[700];

boolean relayStatus;
char* relayLabel;

// для кнопки
boolean lastButton = LOW;      // Переменная для сохранения предыдущего состояния кнопки
boolean currentButton = LOW;   // Переменная для сохранения текущего состояния кнопки


void setup () {
  // инициируем подключение к локальной сети
  delay(300); 
  if (ether.begin(sizeof Ethernet::buffer, mymac, CS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip);

  // настройка входов/выходов
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);

  // включение реле
  setRelayState(true);
}

/*
 * функция сглаживания дребезга
 * принимает в качестве аргумента предыдущее состояние кнопки
 * и выдаёт фактическое.
 */
boolean debounce(boolean last) {
  boolean current = digitalRead(BUTTON_PIN);   // Считать состояние кнопки
  if (last != current) {                       // Если изменилось ...
    delay(5);                                  // ждём 5 мс
    current = digitalRead(BUTTON_PIN);         // Считываем состояние кнопки
    return current;                            // Возвращаем состояние кнопки
  }
}

void setRelayState(boolean relayOn) {
  digitalWrite(RELAY_PIN, relayOn);
  digitalWrite(LED_PIN, relayOn);
  if (relayOn) {
    relayLabel = "ON";
  } else {
    relayLabel = "OFF";
  }
}

void loop () {
  // управление по локальной сети
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  if (pos) {
    if (strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
      setRelayState(true);
    } else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
      setRelayState(false);
    }
    // выдать веб-интерфейс
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html>\n<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"
      MY_IP
      "/\"></head>\n<body>\n<center>Relay is $S</center>\n"
      "<a href=\"http://"
      MY_IP
      "/?OFF\" rel=\"nofollow\">Turn Off</a><br></br>\n"
      "<a href=\"http://"
      MY_IP
      "/?ON\" rel=\"nofollow\">Turn On</a><br></br>\n"
      "<a href=\"http://"
      MY_IP
      "/\" rel=\"nofollow\">Check Status</a><br>\n"
      "</body>\n</html>\n"
      ), relayLabel);
      ether.httpServerReply(bfill.position());
  }

  // реакция на нажатие кнопки для реле
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH) { // если нажатие
    setRelayState(!relayStatus);
  }
  lastButton = currentButton;
}

Начались рабочие будни.
Опробовал скетч, огромнейшее спасибо, что не бросили в одиночестве с проблемой.
Со скетчем выше кнопка не работает вообще. То есть я могу управлять релюшкой с веб-интерфейса, а кнопка мёртвая, её нажатие не переключает реле и не меняет состояние нажатия на кнопку на веб-интерфейсе.

#10 2016-01-11 23:27:52

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Упс, забыл сохранить состояние в глобальной переменной, т.е. надо в конце тела функции setRelayState(..) дописать "  relayStatus = relayOn;"

#11 2016-01-12 20:39:15

z0ri
Участник
Зарегистрирован: 2016-01-10
Сообщений: 19

Re: Управление реле через arduino, enc28j60 и кнопки

Йожэг пишет:

Упс, забыл сохранить состояние в глобальной переменной, т.е. надо в конце тела функции setRelayState(..) дописать "  relayStatus = relayOn;"

Случилось чудо. Магия. Оно работает именно так как надо (подправил совсе чуть-чуть скетч под себя).
Загружается Ардуина, реле не переключается, светодиод не горит. Жму кнопку, диод загорается, реле переключается. Статус можно посмотреть на веб интерфейсе. Переключать релюшку тоже можно через веб-интерфейс, с сохранением возможности посмотреть текущее состояние реле.

Йожэг, огромнейшее спасибо, сам бы я не решил задачу.

Из минусов: как то не стабильно работает сетевой модуль mini enc28j60, как мне кажется. Бывает перезальёшь скетч, а сеть не поднимается и хост Ардуины не пингуется, тогда как реле и кнопка работают, потом через какое то время сам оживает. Бывает, что оживает после нескольких перезагрузок. Бывает, что сутки нормально работает. А может виноваты руки. В общем заказал модуль ethernet shield w5100 в надежде на большую стабильность, а то как-то не серьезно.

Ещё раз огромное спасибо!!!

#12 2016-01-13 00:02:47

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Пожалуйста)

Нагуглил, что для обеспечения большей стабильности модуль enc28j60 необходимо питать от отдельного стабилизатора на 3.3 Вольта, т.к. Arduino обещает только 50 мА.
Ещё один товарищ придумал делать аппаратный сброс enc28j60, если Arduino что-то не понравится.

#13 2016-01-14 23:04:14

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

Здравствуйте уважаемые форумчане smile

Мне очень понравилась ваша тема и я решил сделать эту же конструкцию. Я всё сделал и собрал, у меня всё заработало, только без тактовой кнопки.
У меня есть скетч, но в нём не добавлена тактовая кнопка. Пожалуйста, могли бы вы отредактировать этот скетч. задача добавить в этот скетч тактовую кнопку, чтобы можно было включить с веб сервера, а выключить кнопкой. Я буду очень, очень благодарен, если вы поможете мне с этой задачей!
ВОТ СКЕТЧ: https://yadi.sk/i/KYFASZdnbhUr5
Зарание спасибо!

#14 2016-01-15 00:21:04

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Отличие вашего исходника в том, что состояние выхода теперь хранится не в одной переменной, а в массиве PinStatus[] из 8 элементов. Вот и надо по аналогии повторить для каждого этапа в цикле все те же действия, что были в моей версии.

Массив статусов можно объявить более наглядно:
boolean pinStatus[8] = {false, false, false, false, false, false, false, false};

Пройтись циклом так:

  for (int i = 0; i < 8; i++) {
    pinStatus[i] = false; // тут может быть что-то полезное
  }

А если без цикла, то в C++, как и в большинстве других языков программирования, массив начинается с нулевого индекса, т.е. для 8 элементов будет от pinStatus[0] до pinStatus[7], а pinStatus[8] будет указывать уже на что-то левое в памяти и может даже сломать логику программы.

Вобщем, надо основы языка C учить, даже пока не C++. Знания основ C пригодятся любому айтишнику.

#15 2016-01-15 12:04:29

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

Извените, но я не понимаю в написании кодов( так вы не сможете добавить в моём скетче тактовую кнопку?

#16 2016-01-15 13:44:27

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Исправить ошибку в простейшем скетче, подсказать что-то - это одно дело, а написать за кого-то - совсем другое.
Да и в чём тогда радость самостоятельного изучения Ардуино?

____________________________
http://geektimes.ru/hub/arduino/

#17 2016-01-15 15:36:34

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

А не подскажите где взять скетч для кнопки?

#18 2016-01-15 17:30:17

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Казалось бы, с кнопкой всё просто. Но, как ни странно, с ней есть нюансы. Во-первых, если на "слушающую" ножку микроконтроллера ничего не подавать, то он услышит помехи (наводку от 220 В сети скорее всего), поэтому вместе с простой кнопкой надо использовать резистор-подтяжку на землю или на питание (зависит от логики схемы). Во-вторых, если микроконтроллер (с его-то мегагерцами) успеет опросить состояние кнопки в момент её переключения, то будет заметен эффект "дребезга контактов", т.е. кратковременное замыкание-размыкание из-за особенностей реальной механики. В третьих, если кнопок много (матрица n*m) и мы их считываем (сканируем) общими ножками микроконтроллера, то надо не забывать, что "1" на выходе ножек - это "плюс" питания, а вот "0" - не отключённое состояние, а "минус" питания (условная "земля"). Хотя у микросхем и существует некое третье состояние - высокоимпедансное, когда ножки не выдают ни 1, не 0, а как-бы повисают в воздухе.

Да что уж тут говорить, когда есть Google и тема старая:
* Пример для кнопки и светодиода: http://arduino.ru/tutorials/button
* Обсуждение подключения кнопки: http://arduino.ru/forum/programmirovani … h-novichku

_______________________________________
У кошки 4 ноги: вход, выход, земля и питание.

#19 2016-01-16 19:35:08

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

НЕ подскажите, на какой версии вы использовали скетч выше?
Меня закидует ошибками(

#20 2016-01-16 20:05:03

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

Всё получилось! Загружается Ардуина, реле не переключается, светодиод не горит. Жму кнопку, диод загорается, реле переключается. Статус можно посмотреть на веб интерфейсе. Переключать релюшку тоже можно через веб-интерфейс, с сохранением возможности посмотреть текущее состояние реле.

Но так как у меня 4 канальное реле, включается только 2( Пожалуйста могли бы вы зделать для 4 и подскажите как изменить, что бы я мог включать все 4  neutral

#21 2016-01-16 20:45:17

z0ri
Участник
Зарегистрирован: 2016-01-10
Сообщений: 19

Re: Управление реле через arduino, enc28j60 и кнопки

Продолжаю следить за этой темой форума.
Как только прийдет ко мне модуль w5100, я его опробую, то напишу про стабильность.
Пробовали с товарищами поиграться с электричеством и получилось, что подав на  arduino uno 7v ситуация со стабильностью не изменилась, а подав уже 9v, стал греться кусок платы между входом питания и usb, но сутки проработало (может быть это совпадение). Подавали питание именно в гнездо для питания.
Вот думаю для подобных исследований отдельную тему на форуме создать или не надо, а то вроде бы не по теме уже.

P.s. Йожэг, ещё раз спасибо.

#22 2016-01-16 22:45:25

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

z0ri пишет:

подав на  arduino uno 7v ситуация со стабильностью не изменилась

Дык, если стабилизатор внутренний на 3.3 Вольта слабый, а запитанный от него модуль Ethernet'а может потреблять больше тока раза в 3..4, чем может выдать Ардуина, то увеличением напряжения питания не сильно поможешь.

#23 2016-01-17 22:11:41

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

Всё получилось! Загружается Ардуина, реле не переключается, светодиод не горит. Жму кнопку, диод загорается, реле переключается. Статус можно посмотреть на веб интерфейсе. Переключать релюшку тоже можно через веб-интерфейс, с сохранением возможности посмотреть текущее состояние реле.
Но так как у меня 4 канальное реле, включается только 2( Пожалуйста могли бы вы зделать для 4 и подскажите как изменить, что бы я мог включать все 4

#24 2016-01-19 09:47:19

Яков
Участник
Зарегистрирован: 2016-01-13
Сообщений: 12

Re: Управление реле через arduino, enc28j60 и кнопки

Так вы ответите мне на вопрос?

#25 2016-01-19 15:23:39

Йожэг
Участник
Зарегистрирован: 2015-12-30
Сообщений: 89

Re: Управление реле через arduino, enc28j60 и кнопки

Яков пишет:

у меня 4 канальное реле, включается только 2( Пожалуйста могли бы вы зделать для 4 и подскажите как изменить, что бы я мог включать все 4

Очевидно, что надо удвоить количество проверок и действий. Сделать по аналогии.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела