Реле работает напротив цифрового контакта

У меня есть Arduino UNO с экраном Ethernet, на котором размещена базовая HTML-страница с кнопкой, которая управляет модулем реле.

Я пытаюсь подключиться к кнопке питания компьютера, чтобы включить его удаленно.

Я обнаружил, что реле в основном действует противоположно выходу цифрового контакта

Нормально открытое реле
ВЫСОКИЙ = Открыт
НИЗКИЙ = закрыто

Я подключил его через NOT Gate, сделанный с использованием NPN-транзистора, и он отлично работает, как я и хотел.

Теперь к вопросу... Есть ли способ написать код, чтобы цифровой контакт был сразу = HIGH и достаточно быстро, чтобы реле не замкнуло цепь и случайно не включило/выключило компьютер, когда Arduino перезагружается, поэтому мне не нужно использовать NOT Gate.

, 👍0

Обсуждение

Похоже, у вас есть релейный модуль с оптопарой, который подключен так, ВЫСОКИЙ = ИК-светодиод горит = фототранзистор ВКЛ = силовой транзистор ВЫКЛ. Либо так, либо ИК-светодиод подключен так, что ВЫСОКИЙ = ВЫКЛ, а НИЗКИЙ = ВКЛ. Вам нужно будет показать свою схему и модуль реле, чтобы мы были уверены., @Majenko

@Majenko Да, я думаю, вы правы, я не могу найти схему, но вот ссылка на нее. http://www.amazon.co.uk/gp/product/B009P04ZKC?psc=1&redirect=true&ref_=oh_aui_detailpage_o05_s00, @Marius

На самом деле у вас есть одно из следующих: http://www.sainsmart.com/arduino/arduino-components/relays/sainsmart-2-channel-5v-relay-module-for-arduino-raspberry-pi.html, @Majenko


5 ответов


Лучший ответ:

0

Я решил проблему, Спасибо всем, кто помог.
Мне больше не нужен гейт NOT, вот что я добавил, чтобы заставить его работать:

void setup() {
  startup();

}

void startup() {
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
}

void loop() {

}

(остальный код я удалил, чтобы он был простым и понятным)

,

0

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

Принудительно выключить компьютер не получится, но это более общий способ и не требует аппаратного взлома.

,

Материнская плата слишком старая, чтобы поддерживать Wake On LAN (на ней все еще есть драйвер дискеты: D) Кстати, можно ли использовать Arduino для отправки пакетов Wake On LAN?, @Marius

Вы в БИОС проверяли? Я не могу вспомнить ПК без этой функции, по крайней мере, 15 лет. Если вы проверите ссылку, которую я предоставил, вы увидите, что вам нужно только сгенерировать UDP-пакет с описанным конкретным содержимым и отправить его в широковещательном режиме. Я не пробовал, но не понимаю, почему это не должно работать., @Igor Stoppa


0

Чтобы гарантировать, что реле не переключается между NO-NC, когда контроллер отсутствует, реле потребуется некоторая память.

Представьте, что у вас есть 1-битное управляющее реле памяти. Если arduino умирает/перезапускается, его собственный GPIO может измениться, но память реле запомнит последнее состояние и останется там, пока контроллер не сообщит об обратном, предоставленная схема реле и его элемент памяти не потеряют питание.

Это также означает, что теперь для управления этим реле потребуется как минимум 2 линии от uC.

Я бы предпочел использовать какой-нибудь последовательный регистр сдвига, например CD4094, CD4042, CD4099 и т. д., потому что это позволяет мне управлять более чем одним реле с одних и тех же двух линий на uC.

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

,

Я мог бы также подумать о замене. Если вместо BJT вы использовали MOSFET с низкой емкостью затвора, вы могли бы просто оставить конденсатор на затворе, чтобы удерживать заряд, при отсутствии управляющих входов от uC. Эта конструкция потребует, чтобы линии UC перешли в состояние тристатуса, когда они не управляются, например, при перезапуске. Такой конденсатор сможет удерживать заряд в течение ограниченного времени, поэтому ваш UC должен снова появиться в течение некоторого времени., @GPS

Отличная идея, однако я пытался управлять реле с помощью схемы между платой Arduino и реле. На данный момент я построил ворота НЕ на макетной плате, которая, кажется, работает., @Marius


1

У вас есть релейный модуль от SainSmart:

  • http ://www.sainsmart.com/arduino/arduino-components/relays/sainsmart-2-channel-5v-relay-module-for-arduino-raspberry-pi.html

Схема такая:

Как видите, вы подключаете VCC к +5 В, а IN2 к контакту ввода-вывода. Установка IO на LOW приведет к одновременному включению светодиода и оптопары.

Но это не единственный способ подключения.

Вместо этого подключите VCC к контакту IO, а IN2 к GND. Затем вы устанавливаете выход на ВЫСОКИЙ уровень, чтобы включить его.

Расположение, показанное на схеме, обычно используется, потому что некоторые микроконтроллеры могут потреблять больше тока, чем они могут получать через вывод ввода-вывода. Это не относится к Arduino, у которого есть симметричные контакты ввода-вывода, которые могут потреблять и отдавать одинаковое количество тока.

,

0

Попробуйте это:

const On  = LOW;    // Для неинвертированной логики поменяйте местами включение и выключение.
const Off = HIGH;
const pump = 5;

void setup() {
  pinMode(pump, OUTPUT);    // устанавливает цифровой вывод 13 в качестве выхода
}



digitalWrite(pump, On);
digitalWrite(pump, Off);
,