Управление моторами через модуль реле

Тема в разделе "Arduino & Shields", создана пользователем michaelukolov, 30 дек 2016.

  1. michaelukolov

    michaelukolov Нуб

    Доброго времени суток.
    Подскажите, можно ли управлять обычным коллекторным мотором через модуль реле при помощи ИК пульта?
    Т.е. нажал кнопку на пульте и держишь - реле открылось, мотор крутится, отпустил - реле закрылось, мотор не крутится.
    Пробовал что-то подобное сделать. В принципе, получалось, но пульт работает так, что сначала дает конкретную команду, потом FFFFFFFF. Я записываю в переменную команду, и, если получаю FFFFFFFF, то проверяю, какая команда записана в переменной, и если это команда для включения мотора - включаю его, т.е. релюшку. Но получается так, что реле, как я предполагаю, не успевает открываться, как передача команды с пульта прекращается, и так постоянно.
    Задача - по нажатию и удержании кнопки на пульте заставить работать мотор.
     
  2. rkit

    rkit Гуру

    Код, схема?
     
  3. michaelukolov

    michaelukolov Нуб

    Код (C++):
    #include <IRremote.h>
    #include <IRremoteInt.h>

    IRrecv irrecv(7);
    decode_results final;
    int lastkey = 0;
    int last = 12;
    int enabled = 0;

    void setup()
    {
      irrecv.enableIRIn();
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      pinMode(6, OUTPUT);
      pinMode(5, OUTPUT);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(6, HIGH);
      digitalWrite(5, LOW);
      Serial.begin(9600);
    }

    void loop()
    {
      if (irrecv.decode(&final))
      {
        if (final.value == 551505585)
        {
          lastkey = 1;
          last = 12;
        }
        if (final.value == 551521905)
        {
          lastkey = 0;
          last = 11;
        }
        if(final.value == 4294967295)
        {
          if(last == 12)
          {
          enabled = 1;
          }
        }
        Serial.println(final.value);
        irrecv.resume();
      }
      else
      {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
      enabled = 0;
      }
      if (analogRead(6) <= 450)
      {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);
      }
      else
      {
        if(lastkey == 0)
        {
       
        }
        else
        {
          if(last == 11)
          {
          digitalWrite(2, LOW);
          digitalWrite(3, LOW);
          }
        }
    }
    if(enabled == 1)
    {
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
    }

    }
    Схему могу нарисовать, но с других сайтов будет водяной знак.
    Словами если:
    Arduino D2 - реле IN1
    Arduino D3 - реле IN2
    Arduino A6 - датчик влажности A0 (при обнаружении влажности, останавливает моторы)
    Arduino D5 - GND на ИК-приемнике
    Arduino D6 - VCC на ИК-приемнике
    Arduino D7 - OUT на ИК-приемнике
    С мотора + идет на Arduino +5, но в разрыв через реле.
    С мотора - идет на Arduino GND напрямую.
    Вроде как все.
    При нажатии и удержании 551521905 должен мотор крутиться.
    551505585 - это для остановки, раньше нажатием 551521905 включался и постоянно крутился, а 551505585 отключался. Сейчас же хочу чтобы при удержании 551521905 крутился постоянно.
     
  4. rkit

    rkit Гуру

    Ну самое простое, это запоминать время. когда приходит последняя команда с помощью millis() и не отключать, пока с этого времени не пройдет интервал больший, чем тот, через который приходят FFFFFFFF