Bluetooth машинка.

Тема в разделе "Arduino & Shields", создана пользователем zsm, 5 янв 2014.

  1. zsm

    zsm Гик

    Здравствуйте уважаемые форумчане.
    Давно хотел собрать bluetooth машинку , но всё не доходили руки,
    еще останавливало отсутствие нормального софта под android (весь бесплатный софт предлагает только дискретное управление-вперед , назад ,влево ,вправо.) что совсем не впечатляет..


    Сегодня случайно нашел на маркете довольно интересный проект.
    Установил , залил скетч , как ни странно всё сразу завелось.
    Но есть одно но-двигатели не набирают полную мощность (такое ощущение что analogWrite при максимальных положениях ручек получает от силы 120 вместо 255) , скорее всего дело в скетче но не могу понять что менять в нем...
    Гляньте пожалуйста скетч кому интересно.
    Всем заранее спасибо)


    пока попробую сам поковыряться , попосылаю значения i в серийный монитор..


    Код (Text):
    #define charComand 5 // characters per comand
    #define forward 11
    #define backward 10
    #define left 9
    #define right 6
    int pos = 0;    // variable to store the servo position
    int spd = 0;    // Variable to store the motor speed
    int midspd = 255;
    int midpos = 255;
    int special = 0;
    unsigned long lastCommand;

    char signal,car;

    void setup()
    {
      pinMode(forward, OUTPUT);
      pinMode(backward, OUTPUT);
      pinMode(left, OUTPUT);
      pinMode(right, OUTPUT);
      Serial.begin(9600);
      Serial.println("READY ");
    }

    void loop()
    {
      if(Serial.available()>=charComand){
        lastCommand=millis();
        signal=Serial.read();
        switch(signal){
       
        case 'S':
          readInt(special);
          switch(special){
            case 0:    // Parar todo
              stop_all();
              break;
           
            case 1:    //continua conectado
              lastCommand=millis();        
              break;
          }
          special=0;
          break;
         
        case 'V': // Vertical Bar
          readInt(spd);
          if (spd == midspd){
            Stop();
          }
          else if (spd >midspd){
            spd-=midspd;
            goForward(spd);
          }
          else{
            spd=midspd-spd;
            goBackward(spd);
          }        
          spd=0;
          break;

        case 'H': // Horizontal Bar
          readInt(pos);
          if (pos == midpos){
            stop_turn();
          }
          else if(pos > midpos){
            pos-=midpos;
            go_right(pos);
          }
          else{
            pos=midpos-pos;
            go_left(pos);
          }      
          pos=0;
          break;
         
        case 'L': // New Left bar value
          readInt(midspd);
          midspd/=2;
          Stop();
          break;
       
        case 'R': // New right bar value
          readInt(midpos);
          midpos/=2;
          stop_turn();
          break;
           
        }
        delay(1);
      }
     
      if( (millis() - lastCommand) > 1350){
        stop_all();
        lastCommand=millis();
        Serial.flush();
      }
     
    }

    void readInt(int &num){
      num = 0;
      for(int i=0;i<(charComand-1);i++){
        car=Serial.read();
        num+=(car-48)*(int)(0.5+pow(10,(charComand-2)-i));
      }
    }

    void goForward(int i){
      digitalWrite(backward, LOW);
      analogWrite(forward,i);
    }

    void goBackward(int i){
      digitalWrite(forward, LOW);
      analogWrite(backward,i);
    }

    void stop_all(){
    Stop();
    stop_turn();
    }

    void Stop(){
      digitalWrite(forward,LOW);
      digitalWrite(backward,LOW);
    }

    void go_left(int i) {
      digitalWrite(right, LOW);
      analogWrite(left, i);
    }

    void go_right(int i) {
      digitalWrite(left, LOW);
      analogWrite(right, i);
    }

    void stop_turn() {
      digitalWrite(right, LOW);
      digitalWrite(left, LOW);
    }
     
  2. Sergey991

    Sergey991 Нерд

    попробуйте подключить свою машинку к ПК и выводить через последовательный порт все что отправляете на моторы (точнее транзисторы) и какие именно значения там прыгают
     
  3. zsm

    zsm Гик

    попробовал вывести в монитор значение i , оно доходит только до 127 как и предполагалось..
    щас подшаманю) умножу на 2 его например..
     
  4. zsm

    zsm Гик

    спасибо , разобрался, дело было в настройках android приложения. теперь все в порядке .
    Но всё же не нравится управление рулевой мотором ...
    Думаю как серву прикрутить.

    Вообще хотелось бы раздобыть на android такую софтину , но пока безрезультатно...
    есть ещё такой проект , там довольно классная программа но она рассчитана на управление 2 моторами , т.е. все расчеты происходят в android приложении , а дуня получает по BT готовые значения для двигателей..
    короче я запутался)
    если кто баловался подобной тематикой , поделитесь пожалуйста софтом под андроид)