Управление с радиопульта - ФОРУМ ДВ Робот dvrobot.ru
Понедельник, 24.09.2018, 18:20
Главная Мой профиль Регистрация Выход
  • НАШ МАГАЗИН
  • Вы вошли как Гость | Группа "Гости"Приветствую Вас, Гость
    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Модератор форума: Serg, GRACH  
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Управление с радиопульта
    Управление с радиопульта
    ВячеславДата: Вторник, 25.02.2014, 00:03 | Сообщение # 1
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Здравствуйте товарищи! Поздравляю с  прошедшим праздником! Не знаю как победить скетч для управления колесной платформой с пульта. Схема классическая

    При нажатии на кнопку ПДУ приемник выдает +5В на соответствующем пине, при нажатии на определенную кнопку платформа должна совершать маневр, если кнопка не нажата платформа должна стоять. Сходу соорудил скетч через оператора if...else, но работает только первая кнопка. Подозреваю что нужно использовать swich...case но не смог найти как его правильно использовать. Может есть что то другое более понятное. внизу составленный нерабочий скетч.
    Исправте пожалуйста кому не лень хотя бы на две кнопки. дальше сам поди справлюсь!
    Спасибо!
    Цитатаint IN1 = 1;//пульт 1//
    int IN2 = 2;//пульт 2//
    int IN3 = 3;//пульт 3//
    int IN4 = 4;//пульт 4//
    int IN5 = 5;//пульт 5//
    int IN6 = 6;//пульт 6//
    int IN8 = 8;//двигатель 1а//
    int IN9 = 9;//двигатель 1б//
    int IN10 = 10;//двигатель 2а//
    int IN11 = 11;//двигатель 2б//
    void setup()
    {
    pinMode(IN1, INPUT);
    pinMode(IN2, INPUT);
    pinMode(IN3, INPUT);
    pinMode(IN4, INPUT);
    pinMode(IN5, INPUT);
    pinMode(IN6, INPUT);
    pinMode(IN8, OUTPUT);
    pinMode(IN9, OUTPUT);
    pinMode(IN10, OUTPUT);
    pinMode(IN11, OUTPUT);
    }
    void loop()
    {
    if (digitalRead(IN1) == HIGH)
    {
    digitalWrite(IN8, LOW);//левое вперед//
    digitalWrite(IN9, HIGH);
    digitalWrite(IN10, HIGH);//правое вперед//
    digitalWrite(IN11, LOW);
    }
    else
    {
    digitalWrite (IN8, LOW);
    digitalWrite (IN9, LOW);
    digitalWrite (IN10, LOW);
    digitalWrite (IN11, LOW);
    }
    if (digitalRead(IN2) == HIGH)
    {
    digitalWrite(IN8, HIGH);//левое назад//
    digitalWrite(IN9, LOW);
    digitalWrite(IN10, LOW);//правое назад//
    digitalWrite(IN11, HIGH);
    }
    else
    {
    digitalWrite (IN8, LOW);
    digitalWrite (IN9, LOW);
    digitalWrite (IN10, LOW);
    digitalWrite (IN11, LOW);
    }}
    Прикрепления: 8433291.jpg(93.4 Kb)


    Сообщение отредактировал Вячеслав - Вторник, 25.02.2014, 00:06
     
    SergДата: Вторник, 25.02.2014, 13:35 | Сообщение # 2
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Правильный у вас код, а вот схема с ошибкой.
    Дело в том, что при включении Arduin на входах In1 In2 может оказаться как логический ноль, так и логическая единица.
    Что бы этого не произошло, нужно входы соединять с плюсом или минусом питания через резистор 10 Ком. В вашем случае на обоих входах всегда логическая единица, поэтому программа выполняется с ошибками. Через внутренние цепи радиоприемника поступает небольшое напряжение, поэтому if (digitalRead(IN1) == HIGH будет выполняться всегда, независимо, когда и сколько раз нажали кнопку пульта.
    Решение очень простое -входы Arduino соединить с землей через резисторы 10 Ком, тем самым обеспечив if (digitalRead(IN1) == LOW в перерывах между нажатиями кнопок пульта.
    А вообще для этой схемы применение Arduino совсем не обязательно. Можно просто подавать сигналы с приемника сразу на драйвер через два развязывающих диода.
     
    ВячеславДата: Вторник, 25.02.2014, 18:20 | Сообщение # 3
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Serg, Дома попробую без 1,2 пина, а вот схему на диодах даже не представляю, там же нужна смена полюсов на двигателе.
     
    SergДата: Вторник, 25.02.2014, 19:51 | Сообщение # 4
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Вячеслав
    Цитата Вячеслав ()
    попробую без 1,2 пина

    А зачем без них пробовать?

    Цитата Вячеслав ()
    там же нужна смена полюсов

    полюса будет менять драйвер.
     
    ВячеславДата: Среда, 26.02.2014, 00:24 | Сообщение # 5
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Serg
    Цитата Serg ()
    А зачем без них пробовать?
    Что бы исключить неопределенность на 1 и 2 порту. к тому же еще резисторов нет(.
    Но все равно ничего не получилось.
    Без ардуины пробовал пока получается что то неопределенное.
    Продолжу завтра.
     
    SergДата: Среда, 26.02.2014, 00:27 | Сообщение # 6
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Цитата Вячеслав ()
    Но все равно ничего не получилось

    А что должно было получится?
     
    ВячеславДата: Среда, 26.02.2014, 12:34 | Сообщение # 7
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Serg, Переподключил схему без 1,2 порта. Из скетча тоже убрал все что с ними связано.выходящий сигнал был который идет на драйвер но он 2,3 вольта по тестеру и двигатель не ,,заводится,,Если сегодня ничего не выйдет нарисую схему по подробнее.
     
    ВячеславДата: Понедельник, 03.03.2014, 23:47 | Сообщение # 8
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Вновь занялся данной темой. Изобразил схему подключения подробнее.

    Пульт пока убрал, поставил кнопки, переписал скетч.

     int IN5 = 5;//Кнопка 1//int IN6 = 6;//Кнопка 2//
    int IN8 = 8;//двигатель 1а//
    int IN9 = 9;//двигатель 1б//
    int IN10 = 10;//двигатель 2а//
    int IN11 = 11;//двигатель 2б//
    void setup()
    {
    pinMode(IN5, INPUT);
    pinMode(IN6, INPUT);
    pinMode(IN8, OUTPUT);
    pinMode(IN9, OUTPUT);
    pinMode(IN10, OUTPUT);
    pinMode(IN11, OUTPUT);
    }
    void loop()
    {
    if (digitalRead(IN5) == HIGH)
    {
    digitalWrite(IN8, LOW);//левое вперед//
    digitalWrite(IN9, HIGH);
    digitalWrite(IN10, HIGH);//правое вперед//
    digitalWrite(IN11, LOW);
    }
    else
    {
    digitalWrite (IN8, LOW);
    digitalWrite (IN9, LOW);
    digitalWrite (IN10, LOW);
    digitalWrite (IN11, LOW);
    }
    if (digitalRead(IN6) == HIGH)
    {
    digitalWrite(IN8, LOW);//левое назад//
    digitalWrite(IN9, HIGH);
    digitalWrite(IN10, HIGH);//правое назад//
    digitalWrite(IN11, LOW);
    }
    else
    {
    digitalWrite (IN8, LOW);
    digitalWrite (IN9, LOW);
    digitalWrite (IN10, LOW);
    digitalWrite (IN11, LOW);
    }}
     но механизм не включается, все таки думаю что то со скетчем.
    Подскажите что где не так.
    Прикрепления: 1585356.jpg(138.8 Kb)
     
    SergДата: Вторник, 04.03.2014, 00:07 | Сообщение # 9
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline
    Цитата Вячеслав ()
    но механизм не включается

    что за механизм?
    Зачем одинаковые действия на разные кнопки?

    Проверьте сам драйвер без платы Arduino- подайте на управляющие входы напряжение от источника питания через резисторы 1-10 кОм.
     
    ВячеславДата: Вторник, 04.03.2014, 01:21 | Сообщение # 10
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Serg, Драйвер работает, проверял с пульта без ардуино вперед назад перемещается. Дело не в одинаковых действиях, а в том что когда в схеме две кнопки и в скетче прописаны две двигатели не включаются. когда задействована одна
    int IN5 = 5;//Кнопка 1//
    int IN8 = 8;//двигатель 1а//
    int IN9 = 9;//двигатель 1б//
    int IN10 = 10;//двигатель 2а//
    int IN11 = 11;//двигатель 2б//
    void setup()
    {
    pinMode(IN5, INPUT);
    pinMode(IN8, OUTPUT);
    pinMode(IN9, OUTPUT);
    pinMode(IN10, OUTPUT);
    pinMode(IN11, OUTPUT);
    }
    void loop()
    {
    if (digitalRead(IN5) == HIGH)
    {
    digitalWrite(IN8, LOW);//левое вперед//
    digitalWrite(IN9, HIGH);
    digitalWrite(IN10, HIGH);//правое вперед//
    digitalWrite(IN11, LOW);
    }
    else
    {
    digitalWrite (IN8, LOW);
    digitalWrite (IN9, LOW);
    digitalWrite (IN10, LOW);
    digitalWrite (IN11, LOW);
    }}
    работает.

    Теперь об управлении без ардуино. Куда вставлять развязывающий диод так и не понял. Вперед назад все работает, как подключить кнопки на разворот платформы так и не ясно. Но язык инженера чертеж.

    Вставьте в схему  диоды куда надо.
    Спасибо!
    Прикрепления: 3059857.jpg(108.8 Kb)


    Сообщение отредактировал Вячеслав - Вторник, 04.03.2014, 01:22
     
    SergДата: Вторник, 04.03.2014, 13:56 | Сообщение # 11
    Ампер
    Группа: Модераторы
    Сообщений: 510
    Репутация: 28
    Статус: Offline








    Может я не совсем правильно указал подключение диодов к драйверу- я не в курсе, какая ножка за что отвечает.
    Весь смысл в одновременной подаче напряжения с приемника на пары выводов драйвера, что бы обеспечить необходимое направление вращения двигателей при движении и поворотах.
    Прикрепления: 8455227.jpg(176.0 Kb) · 8256403.jpg(175.4 Kb) · 2788490.jpg(176.5 Kb) · 7774901.jpg(179.6 Kb)
     
    ВячеславДата: Вторник, 04.03.2014, 14:23 | Сообщение # 12
    3.5 Вольт
    Группа: Пользователи
    Сообщений: 13
    Репутация: 20
    Статус: Offline
    Serg, Схема подключения ясна Спасибо. Она у меня тоже вырисовывалаль, но меня смутило куда пойдёт минус. Дома попробую.
     
    nipercopДата: Пятница, 28.03.2014, 01:24 | Сообщение # 13
    1.5 Вольт
    Группа: Пользователи
    Сообщений: 1
    Репутация: 0
    Статус: Offline
    Здравствуйте!
    Вячеслав, у вас изначально логическое построение кода не верно!
    А именно там где находится второй else он фактически выполняется тогда когда кнопка IN6 не нажата, соответственно когда вы нажимаете IN5, вы пускаете ток И тот час же вы отрубаете подачу тока во втором else.
    А вот так все будет верно:
    
    Код
    if (digitalRead(IN5) == HIGH)  
      {  
          //колеса вперед
      } else if (digitalRead(IN6) == HIGH)  
      {  
          //колеса назад
      }  
      else  
      {  
          //колеса стоп
      }
    Я так то ни разу с ардуино не игрался, но в программировании отлично.


    Ищем новые решения...=р
     
    ФОРУМ ДВ Робот dvrobot.ru » DV ROBOT » Arduino - вопросы и ответы. » Управление с радиопульта
    • Страница 1 из 1
    • 1
    Поиск:

    ДВ Робот - Чат