Проблемы с работой 1канального 5в реле.
- Войдите на сайт для отправки комментариев
Сб, 27/06/2015 - 18:13
Приветствую вас форумчане.
Имею программу для работы реле от ардуины с термодатчиком. Реле управляется от кнопки(или емкостного датчика). Должно сработать и отключиться по таймеру через 3секунды.
[code] /** * Термогигрометр на базе датчика SHT10 */ //Объявляем библиотеки #include <SHT1x.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> //декларируем переменные для релюшки с прерыванием #define button 2 // кнопка или емкостной датчик приближения #define relay 6 // реле volatile byte flag=0; unsigned long prevmillis; // Датчика температуры и влажности #define dataPin 10 //желтый провод #define clockPin 11 //голубой провод SHT1x sht1x(dataPin, clockPin); LiquidCrystal_I2C lcd(0x3F,16,2); // установка LCD address to 0x3F for a 16 chars and 2 line display void setup() { lcd.init(); // Инициализируем lcd // Печать приветствия на LCD. lcd.backlight(); lcd.print("TEMP and VLAZHN"); lcd.setCursor(0, 1); lcd.print("TEPLICA "); delay(2000); lcd.clear(); //режимы pin pinMode(button,INPUT_PULLUP); // кнопка на вход вкл.подтягивающий резистор. pinMode(relay,OUTPUT); // реле attachInterrupt(0, my_func, FALLING); //прерывание на изменение логич. уровня } void loop() { float temp_c; float humidity; // Читаем показания датчика SHT10 temp_c = sht1x.readTemperatureC(); humidity = sht1x.readHumidity(); // Выводим данные на LCD lcd.setCursor(0, 0); lcd.print("Temperat: "); lcd.print(temp_c); lcd.print("C "); lcd.setCursor(0, 1);// вывод второй строки lcd.print("Vlazhnst: "); lcd.print(humidity); lcd.println("% "); if (1 == flag) { // если кнопку отпустили prevmillis = millis(); digitalWrite(relay,LOW); //включаем реле flag = 2; } if (2 == flag) { if ( millis()-prevmillis >=3000) { //если счёт 3 секунд вышел, то digitalWrite(relay,HIGH); //закрываем окно flag=0; //сбрасываем флаг работы } } } void my_func() { //отжали flag=1; //ставим флаг что работа идёт.. } [/code]
При включении Ардуины реле щелкает контактами и через мгновение еще раз. Только после второго раза она выходит в ждущий режим. Как исключить это ложное срабатывание?
Я так понимаю, реле у Вас работает в инверсном режиме? Включается низким уровнем (LOW), выключается высоким (HIGH)?
Дело в том, что при включении ардуины на пинах по-умолчанию низкий уровень (LOW). Поэтому сразу после включения ардуины реле тоже включается не доходя даже до условия в void loop(). При инициализации надо принудительно установить высокий уровень (HIGH), тогда реле изначально будет выключено. Для этого добавьте в void setup() строку digitalWrite(relay,HIGH);
А в дальнейшем код вообще нормально работает?
Ставил сразу HIGH? тогда вообще беспорядочно щелкало реле. Поставил LOW, - только два срабатывания
В общем да. От кнопки срабатывает, но с подтормаживанием
Ставил 4-х релейный шилд, на ХАе роботало без проблем, когда поставил 1-канальное реле - заморочки пошли
Я так понимаю, реле у Вас работает в инверсном режиме? Включается низким уровнем (LOW), выключается высоким (HIGH)?
А это предположение верно? Просто есть реле, которые включаются HIGH, а есть, который LOW... Если одноканальное реле антипод 4х-канального в этом случае, то все HIGH-LOW необходимо поменять местами)
Реле срабатывает когда я in- цепляю на "-" 5,0в. От + она не срабатывает. Выходит надо на управление прописывать LOW
Реле срабатывает когда я in- цепляю на "-" 5,0в. От + она не срабатывает. Выходит надо на управление прописывать LOW
вы решили что если назваться женским именем, то все бросятся помогать? да нам тут пофигу, даже если вы с Марса...
Спасибо за совет! :)
У меня была такая же проблема
Не это моя помощница, тоже озадачена. Не надо на нее так строго
К тому же отвечале мне а не ей
использовать транзистор с открытым коллектором, им управлять реле.
реле тогда можно (и даже нужно) использовать на 12в
на 5в использовать оченть не рекомендую - питание процессора должно быть качественным а не со всякими там висящими реле.
далее - на уно и подобных не использовать под реле вывод 13 - там уже висит светодиод и могут быть проблемы с управлением тразисторным ключем.
ЗЫ: никогда не использую реле на 5в и другим не советую.
Использую если надо и никогда не бывает никаких проблем.
ЗЫ: никогда не использую реле на 5в и другим не советую.
У меня два восьмиканальных 5В релейных модуля без проблем работают... Тут фишка в том, что не надо их питать от ардуинки... Китайский DC-DC преобразователь и на него всю "нагрузку" (реле, газоанализаторы и т.п.)... Мне это посоветовали месяца три или больше назад завсегдатаи форума и теперь никаких проблем с питанием не возникает))) trembo, Вроде бы, тоже тогда был одним из них)
У меня 4-х релейный шилд работает без проблем. С LOW в стендбае. Но когда поставил 1-канальное реле, там оказалось HIGH в режиме молчания. Вот это меня и сбило с толку. Не знал этого.
вот именно, если 5В то стараются тулить на те же 5В что и проц, а этого категорически не следует делать. уно многие питают от внешних 12В БП. и реле на 12В везде как грязи, и меньше ток потребляют.
категорично так нельзя заявлять, тк в большинстве случаев пользователи используют ардуинку как небольшой микроконтроллер, без больших проектов. А у кого большие проекты, те сразу проектируют серьезные коммутаторы.
аргументирую: 5В тогда берут откуда? верно - с юсб. Там мало что само напряжение гуляет 4,5-5В, еще и реле будет на нем прыгать.
а если не с юсб а с отдельного бп, то в 5В от бп смысл пропадает. лучше брать 12В бп и не грузить 5вольтоую часть током более 50мА.
при питании всех реле и прочего от наример юсб(схорошим током, ток 4 или 8 шт реле 5вольтовых - посчитайте сколько) - можно наступить на грабли и долго ломать голову - почему же "глючит" программа. Давно отказался от такого рода граблей.
USB применяют только в режиме отладки. В готовом изделии всегда присутствует отдельный источник питания и как правило это 12V
USB применяют только в режиме отладки. В готовом изделии всегда присутствует отдельный источник питания и как правило это 12V
ну и... и 8 шт реле (ну или меньше) на 5в параллельно с процом? а смысл?
категорично так нельзя заявлять, тк в большинстве случаев пользователи используют ардуинку как небольшой микроконтроллер, без больших проектов. А у кого большие проекты, те сразу проектируют серьезные коммутаторы.
Ну вот тут понятие "БОЛЬШИЕ ПРОЕКТЫ" весьма относительные я считаю... МЕГА при грамотном коде зафигачивает довольно-таки неплохие штуки... А по поводу 12В реле я от части согласен - это всегда меньший ток... Но тут опять же во всей этой коммутации кому как: многие из подручных БП все делаеют (а они как на 5В, так и на 12В)...
т.е. есть на LOW включается, то нельзя переделать чтобы включалось на HIGH?
т.е. есть на LOW включается, то нельзя переделать чтобы включалось на HIGH?
Зачастую перемычка есть как раз для этого дела...
т.е. есть на LOW включается, то нельзя переделать чтобы включалось на HIGH?
А вообще какая разница от LOW или HIGH? Вы же сами программу пишите. В void setup сразу пишите для Data реле
pinMode(relay, OUTPUT);
digitalWrite(relay,HIGH);
а в void loop digitalWrite(relay, LOW);
можно сказать по религиозным соображениям)
просто привык если лоу, то выключено, если хай, то включено)
Религиозные соображения как правило усредняются через #define. В вашем случае, к примеру так:
:)
#define RELAY_OFF digitalWrite(relaypin, HIGH) // лучше сразу так
можно сказать по религиозным соображениям)
просто привык если лоу, то выключено, если хай, то включено)
Именно по религиозным соображениям в Англии ездят по левой стороне.
И считают это нормальным. Но для вас нелогичным.
Точно так же если для "включить " нужно подать 0 значит нужно его подать для включения.
RS232. Сигнал "Марк" - единица, передается напряжением от минус 3 до минус 15 Вольт