Помгите с подключением к RC

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Alex_71, 25 апр 2014.

  1. Alex_71

    Alex_71 Нерд

    Доброго дня!
    Я сам занимаюсь радиоуправляемыми моделями- копиями.
    Мне необходимо сделать систему уборки и выпуска шасси.
    Присмотрел для этого дела Uno и motor shield. Попробовал скрестить свой приёмник и ардуинку и у меня возник затык. Из темы про бульдозер попробовал скетч на управление, но мотор не крутится, из первоисточника взял код на просмотр через монитор порта, значения меняются, но больше ни как.
    Что мне нужно что бы получилось :
    Есть два двигателя с винтовым валом по которому двигается гайка и двигает исполнительный механизм, на крайних положениях стоят кнопки-концевики.
    Нужно что бы при включении мотор начал крутится до включения концевика и стоп , ждём следующей команды, есть команда двигатель начал крутится назад до следующего концевика.
    два двигателя управляются с одной команды, но останов по своему концевику на каждый двигатель,
    у команды только 2 значения или низкое или высокое, середины нет(тумблер на пульте, но сигнал шим (мин 1093-1096 : мах 1896-1901))
    На фотах как у меня всё собрано в кучку, приемник на 5 канале.
    IMG_0072.JPG IMG_0073.JPG
     
  2. Alex_71

    Alex_71 Нерд

    пока добился работы по отдельности
    вот такого кода:
    Код (Text):
    /*
    RC PulseIn Joystick
    By: Nick Poole
    SparkFun Electronics
    Date: 5
    License: CC-BY SA 3.0 - Creative commons share-alike 3.0
    use this code however you'd like, just keep this license and
    attribute. Let me know if you make hugely, awesome, great changes.
    */

    int ch1; // Here's where we'll keep our channel values


    void setup() {

    pinMode(5, INPUT); // Set our input pins as such
    Serial.begin(9600); // Pour a bowl of Serial

    }

    void loop() {
     
      ch1 = pulseIn(5, HIGH, 25000); // Read the pulse width of

      if(ch1>1100){Serial.println(" Engaged");}
      if(ch1<1800){Serial.println(" Disengaged");}

    Serial.println(); //make some room

    }
     
    этот код выдаёт на терминале нужные значения при переключении тумблера на пульте.

    а вот этот крутит моторы по программе,

    Код (Text):
    #include <AFMotor.h>

    AF_DCMotor right_motor(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
    AF_DCMotor left_motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
    void setup() {
      Serial.begin(9600);          // set up Serial library at 9600 bps
      right_motor.setSpeed(255);    // set the speed to 200/255
      left_motor.setSpeed(255);    // set the speed to 200/255
    }

    void loop() {
      right_motor.run(FORWARD);      // turn it on going forward
      left_motor.run(FORWARD);      // turn it on going forward


      right_motor.run(BACKWARD);    // the other way
      left_motor.run(BACKWARD);    // the other way


      right_motor.run(RELEASE);      // stopped
      left_motor.run(RELEASE);      // stopped

    }

    теперь надо как то это всё скрутить вместе, что бы при "if(ch1>1100){Serial.println(" Engaged");}" мотор выполнял
    "right_motor.run(FORWARD); // turn it on going forward
    left_motor.run(FORWARD); // turn it on going forward
    "
    а при"if(ch1<1800){Serial.println(" Disengaged");}" вот эту строку
    "
    right_motor.run(BACKWARD); // the other way
    left_motor.run(BACKWARD); // the other way
    "
    Может кто подскажет в каком направлении двигаться?
    С увю Александр
     
  3. Alex_71

    Alex_71 Нерд

    попробовал соединить , вот что получилось:
    Код (Text):
    #include <AFMotor.h>
    int ch1;
    AF_DCMotor right_motor(1, MOTOR12_64KHZ);
    AF_DCMotor left_motor(2, MOTOR12_64KHZ);

    void setup() {

      pinMode(5, INPUT);
      right_motor.setSpeed(255);  
      left_motor.setSpeed(255);
    }

    void loop() {
      ch1 = pulseIn(5, HIGH, 25000);
      if(ch1>1100){
        right_motor.run(FORWARD);
        left_motor.run(FORWARD);
      }
      if(ch1<1800){
      }
      right_motor.run(BACKWARD);
      left_motor.run(BACKWARD);
    }
     
    но моторы на команды передатчика не реагируют....подскажите в чём мой косяк?