Страница 10 из 10

Arduino. Изучаем вместе

Добавлено: 10 июл 2018, 03:48
KimIV
РЕКЛАМА, Андрей, дописал в твой скетч:
- Обработку концевика и переключение режимов.
- В обработке режимов ифы заменил на свитч. Так код получается компактнее.

Код: Выделить всё

int regim=1;
int flag=0;

void setup()
{
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop()
{
  //---------------- Обработка концевика  --------------------------------
  if (digitalRead(15) == HIGH && flag == 0)   // если концевик сработал
  {
    if (regim == 2) regim = 3;
    if (regim == 4) regim = 1;
  }

  //---------------- Обработка нажатий кнопки --------------------------------
  if (digitalRead(14) == HIGH && flag == 0)   // если кнопка нажата
                                              // и перемення flag равна 0, то ...
  {
    // Делаем задержку от дребезга
    delay(10);

    regim++;
    flag=1;

    // это нужно для того что бы с каждым нажатием кнопки
    // происходило только одно действие

    if (regim > 4)  //ограничим количество режимов
    {
      regim = 1;    // так как мы используем только одну кнопку,
                    // то переключать режимы будем циклично
    }
  }

  if (digitalRead(14) == LOW && flag == 1)  // если кнопка НЕ нажата
                                            // и переменная flag равна - 1, то ...
  {
    // Делаем задержку от дребезга
    delay(10);
    flag=0;     //обнуляем переменную "knopka"
  }

  //------------------------------ Обработка режимов --------------------------------
  switch (regim)
  {
    case 1:
      digitalWrite(9, LOW);   // выключаем все реле
      digitalWrite(10, LOW);
      break;
    case 2:
      digitalWrite(10, HIGH); // включае реле "открыть"
      digitalWrite(9, LOW);
      break;
    case 3:
      digitalWrite(9, LOW);   // выключаем все реле
      digitalWrite(10, LOW);
      break;
    case 4:
      digitalWrite(9, HIGH);  // включаем реле "закрыть"
      digitalWrite(10, LOW);
      break;
  }
}

Arduino. Изучаем вместе

Добавлено: 10 июл 2018, 15:28
L0ki
Ребяты, не обижайтесь пожалуйста...,
я конечно понимаю что плодить "индусский код" :jokingly: много ума не надо
однако прежде чем писать код, иногда подумать (головой!!!) бывает совсем не вредно. :P
я ж далеко НЕ ЗРЯ помянул в посте выше 561ТМ2.

Итак..., абисняю " на пальцах".

Смотрим техзадание:
РЕКЛАМА писал(а):Источник цитаты Управление хочу одной кнопкой 4 режима по кругу ( стоп-закрыть-стоп-открыть), это вроде заработало.
Но теперь надо подвесить концевик (один) что-бы по его сработке второй режим переключался на третий, а четвёртый переключался на первый.
И была возможность кнопкой переключить его на следующий режим.

и видим что у нас система имеет четыре состояния, которые переключаются по порядку.
Т.е. фактически "это" банальный двухразрядный двоичный счетчик.
Состояние счетчика увеличивается на еденичку как от импульса брелка, так и от концевика.
В двоичном виде состояния счетчика выглядят так:
00
01
10
11
Смотрим на циферки выше и сравниваем их с ТЗ,
и видим что младший разряд счетчика - это фактически состояние "старт-стоп",
а старший - направление "открыть-закрыть".
Т.е. для получения двух выходных сигналов "открыть" и закрыть"
достаточно сделать логическое AND младшего разряда счетчика со старшим разрядом для "закрыть",
а для "открыть" логическое AND младшего разряда счетчика с инвертированным значением старшего разряда.

Сей нехитрый алгоритм лехко и непринужденно реализуется как на мелкой логике,
так и программно (например на ассемблере он влезет максимум в десяток-другой байт кода), причем БЕЗ выше нарисованных вами извращений в лучших традициях индусских программистов (с кучей ифов кейсов и т.д...) :rofl:

Arduino. Изучаем вместе

Добавлено: 10 июл 2018, 20:59
РЕКЛАМА
Счас пойду попробую.

Ардуину выбрал только потому что надеюсь постепенно навесить на нее еще всяких штук, в хотелках управление скоростью привода, возможно управление воротами через телефон, контроль времени работы привода с выходом "авария".
И ворот у меня двое повиснет на эту ардуину, плюс калитка. плюс освещение въезда. А код индусский, так это только из-за отсутствия опыта и навыков, главное чтоб работал, пока не до эстетики. Я вот механику ворот вылизал, кинематика складывания безупречная и регулировки присутствуют все необходимые. Этим горд. А навыки программирования дело наживное.

Отправлено спустя 12 минут 41 секунду:
Спасибо Игорь, работает.

Только при сработавшем концевике позволяет кнопкой управления все-равно включить по очереди оба реле. т.е. пока кнопка нажата какое-то реле будет активировано, счас пойду читать-искать как сделать чтоб при срабатывании концевика в режиме "открыть" следующим мог быть только "закрыть"

Хотя это не так и существенно, но хотелось-бы избавиться от возможности нечаянно закрыть закрытые ворота, так сказать защита от дурака..

Arduino. Изучаем вместе

Добавлено: 10 июл 2018, 21:56
L0ki
РЕКЛАМА писал(а):Источник цитаты но хотелось-бы избавиться от возможности нечаянно закрыть закрытые ворота, так сказать защита от дурака.

для "этого" по хорошему надо ДВА концевика:
первый фиксирует конечное состояние "закрыто"
второй фиксирует конечное состояние "открыто".

Arduino. Изучаем вместе

Добавлено: 10 июл 2018, 22:28
РЕКЛАМА
Скорее всего вы правы, так будет правильнее и с механической точки зрения..
Просто у меня пока всего 2 концевика на двое ворот...

Вот таких:
New-LJ12A3-4-Z-BX-Inductive-Proximity-Sensor-Detection-Switch-NPN-DC6-36V-4mm-Z09-Drop.jpg


Я так понимаю какого типа датчик, npn или pnp не важно, от этого только зависит +или - подтягивать на вход ардуины?

Arduino. Изучаем вместе

Добавлено: 11 июл 2018, 16:45
L0ki
и еще такой момент...
Неприятный.
Насколько я понял у вас самый простейший китайский радиобрелок,
и с помощью этой хрени вы хотите рулить гаражными воротами.
Там внутри обычно живут чипы энкодеров вроде PT2240 или им подобные.
Так вот... там СТАТИЧЕСКИЙ код.
То бишь передаваемая команда может быть легко и непринужденно перехвачена по эфиру, и после этого злоумышленник может ее передать в любой удобный для него момент.
А если и даже не перехватить, то кодирование там примитивное - банальным полным перебором (например с помощью все той же ардуины) подбирается.
То бишь защиты от злоумышленников там НЕТ. Нет от слова "совсем".
"такое" можно только что на детские радиоуправляемые машинки ставить (для чего собственно говоря эти чипы и разрабатывались).
Так вотЪ, когда ваш гараж обнесут воры (я говорю "когда", а НЕ "если" аз ибо это в данном случае будет неизбежно), не пеняйте на то что Вас не предупреждали.

Arduino. Изучаем вместе

Добавлено: 16 июл 2018, 17:35
РЕКЛАМА
Я в курсе.
Автоматика не на гаражных воротах, а на въездных на участок, чтоб не бегать открывать. И поверьте, там есть более простые способы попасть на участок, например через отсутствующий забор соседа, или через огород другого соседа, или через незапираемую калитку. Цели защищаться воротами от злоумышленников вообще нету. Я 10 лет жил без забора вообще.


Разделил концевики на два, стало лучше но проблему полностью не решило, при сработанном концевике например отслеживающем открытие если 2 раза быстро нажать кнопку то опять при зажатии управляющей кнопки на реле будет идти команда "открыть"

Arduino. Изучаем вместе

Добавлено: 17 июл 2018, 07:15
ROW
Сообщение не по теме
РЕКЛАМА писал(а):Источник цитаты там есть более простые способы попасть на участок, например через отсутствующий забор соседа, или через огород другого соседа, или через незапираемую калитку.
:rofl: :rofl: :rofl: а ворота тогда зачем, посреди поля? :D
Свернуть

Arduino. Изучаем вместе

Добавлено: 17 июл 2018, 11:15
РЕКЛАМА
От улицы отгородиться.
Слишком много стало любопытных.

Arduino. Изучаем вместе

Добавлено: 01 авг 2018, 19:14
L0ki
РЕКЛАМА, ну тогда, да... китайрадиокнопки в таком случае будет вполне достаточно.
Я просто подумал что это будут ворота гаража, вот и.... :unknown:

РЕКЛАМА писал(а):Источник цитаты Разделил концевики на два, стало лучше но проблему полностью не решило, при сработанном концевике например отслеживающем открытие если 2 раза быстро нажать кнопку то опять при зажатии управляющей кнопки на реле будет идти команда "открыть"

Надо не только два концевика ставить но и вешать их на два отдельных входа контроллера.
Т.е. логика работы программы должна блокировать при соответствующем зажатом концевике команды "закрыть закрытое" и "открыть открытое".
Собственно говоря именно поэтому их и надо два.

P.S.
"концевик" - это по сути обычная кнопка, т.е. там унутре просто контакты которые замыкаются (и/или размыкаются) при нажатии на него.
Так что тут можно применить много чего...
Лично я бы для уличных условий поставил не китайчатину а старосоветские концевики у которых на штоке сидит мембрана которая герметизирует поторха концевика от окружающей среды.
Либо в роли концевиков применил герконы+магниты ибо в данном случае токи через концевики мизерные, и герконы, если они защищены от механических и климатических воздействий, будут надежно служить оооочень долго.