Go Down

Topic: Servo Motor - Arduíno (Read 81 times) previous topic - next topic

fabiocsipak

Fala galera, beleza? Estou fazendo um projeto no TCC da faculdade e usando um servo motor onde controlo rotação e também o tempo em que fica na posição.
Precisaria de uma forma de deixar os tempos personalizáveis, como se fossem setups pré-definidos, alguém pode me ajudar?

esse é o código que estou usando:

#include <Servo.h> //inclui a biblioteca
Servo motor ;
void setup(){
motor.attach(9); //declara o número da porta digital PWM utilizada
}
void loop(){
motor.write(175); //posição inicial : 175 graus
delay(10000); //fica parado na posição 175 graus durante 1 segundo
motor.write(120); //depois do 1 s, passa para a posição 120 graus
delay(10000);//parado na posição 120 graus durante 1 segundo
motor.write(60); //depois do 1 s, passa para a posição 60 graus
delay(10000);//parado na posição 60 graus durante 1 segundo
motor.write(20); //depois do 1 s, passa para a posição 20 graus
delay(10000);//parado na posição 20 graus durante 1 segundo
}

tecdiego

#1
May 27, 2019, 05:30 pm Last Edit: May 27, 2019, 06:18 pm by tecdiego
Bom dia fabiocsipak.

Uma primeira observação, para menlhor entendimento do seu post, existe uma tag chama code, que serve justamente para você colocar seu código nela e fica mais fácil a visualização.

Vamos a sua dúvida. Eu posso te ajudar, mas primeiro gostaria de saber algumas coisas:
1 - se o tempo de parada será defino ontime( com o programa rodando)?
2 - seu programa terá alguma interface?Display, Monitor Serial, Botões?

Fiz um exemplo para alterar os valores usando a porta serial pela própria IDE do Arduino:
Code: [Select]

#include <Servo.h> //inclui a biblioteca
int tempo1 = 1000; // Tempo para a primeira pausa
int tempo2 = 1000; // Tempo para a segunda pausa
int tempo3 = 1000; // Tempo para a terceira pausa
int tempo4 = 1000; // Tempo para a quarta pausa
int intervaloTempo = 0; // diz qual é o intervalo que se deseja alterar

String comando = "";      // Variavel que guardará os valores do camando digitado
bool stringCompletada = false;  // Verifica se a string foi lida por completa
bool motorSelecionado  = false; // verifica se o motor para alterar a velocidade já foi selecionado
bool executarPrograma = false; // Verifica se deve executar o programa se for true;
Servo motor ;

void setup(){
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);// inicia a comunicação Serial 9600 Baud/rates
  Serial.println("Iniciando programa.");
  motor.attach(9); //declara o número da porta digital PWM utilizada
  Serial.println("Digite o número da pausa que você quer alterar");
  Serial.println("Digite 'ajuda' para ver a lista de comandos");
  Serial.println("ou 'executar' para executar o programa");
  Serial.println("lembrando que todos os comando devem se digitados sem ''");
 
 
 
}
void loop(){

  if (stringCompletada == true){
    executarComando(comando);
    stringCompletada = false;
  }
  if(executarPrograma == true){
    motor.write(175); //posição inicial : 175 graus
    delay(tempo1); //fica parado na posição 175 graus durante 1 segundo
    motor.write(120); //depois do 1 s, passa para a posição 120 graus
    delay(tempo2);//parado na posição 120 graus durante 1 segundo
    motor.write(60); //depois do 1 s, passa para a posição 60 graus
    motor.write(20); //depois do 1 s, passa para a posição 20 graus
    delay(tempo4);//parado na posição 20 graus durante 1 segundo 
    executarPrograma = false;
    Serial.println("Programa Executado!");
  }
 
}

void serialEvent(){

    while (Serial.available()){

      char charSimples = (char)Serial.read(); // lê os dados enviados pela Serial
      if (charSimples == '\n'){ // verifica se o caracter é uma quebra de linha
        stringCompletada = true; // diz que a string foi lida completamente
      } else {
        comando += charSimples;
      }
    }
}


void executarComando(String comandoDigitado){
  if (motorSelecionado == false){
    if(comandoDigitado == "1"){
     
      motorSelecionado = true;
      intervaloTempo = 1;
      Serial.println("Motor 1 Selecionado.");
      Serial.print("Pausa na posição 1 é de ");
      Serial.print(tempo1);
      Serial.println("ms");
      Serial.println("Digite o novo tempo ou digite 'c' para cancelar");

    } else if(comandoDigitado == "2"){
     
      motorSelecionado = true;
      intervaloTempo = 2;
      Serial.println("Motor 2 Selecionado.");
      Serial.print("Pausa na posição 2 é de ");
      Serial.print(tempo2);
      Serial.println("ms");
      Serial.println("Digite o novo tempo ou digite c para cancelar");

    } else if(comandoDigitado == "3"){
     
      motorSelecionado = true;
      intervaloTempo = 3;
      Serial.println("Motor 3 Selecionado.");
      Serial.print("Pausa na posição 3 é de ");
      Serial.print(tempo3);
      Serial.println("ms");
      Serial.println("Digite o novo tempo ou digite c para cancelar");

    } else if(comandoDigitado == "4"){
     
      motorSelecionado = true;
      intervaloTempo = 4;
      Serial.println("Motor 4 Selecionado.");
      Serial.print("Pausa na posição 4 é de ");
      Serial.print(tempo4);
      Serial.println("ms");
      Serial.println("Digite o novo tempo ou digite 'c' para cancelar");

    } else if(comandoDigitado == "c"){
      comando ="";
      Serial.println("Digite o número da pausa que você quer alterar");
      Serial.println("Digite 'ajuda' para ver a lista de comandos");
      Serial.println("ou 'executar' para executar o programa");
      Serial.println("lembrando que todos os comando devem se digitados sem ''");

    } else if((comandoDigitado == "executar") || (comandoDigitado == "run") || (comandoDigitado == "rodar") ||(comandoDigitado == "e")){
      Serial.println("Executando programa!");
      executarPrograma = true;
    } else if(comandoDigitado == "ajuda"){
      Serial.println("");
      Serial.println("/*************************************************************/");
      Serial.println("Digite '1' para alterar o tempo na primeira pausa");
      Serial.println("Digite '2' para alterar o tempo na segunda pausa");
      Serial.println("Digite '3' para alterar o tempo na terceira pausa");
      Serial.println("Digite '4' para alterar o tempo na quarta pausa");
      Serial.println("Digite 'ver todos' para ver o tempo de pausa em todos os intervalostodos ");
      Serial.println("Digite 'executar' ou 'rodar' ou 'run' para executar o programa ");
      Serial.println("lembrando que todos os comando devem se digitados sem ''");
      Serial.println("/*************************************************************/");
      Serial.println("");

    }else if(comandoDigitado == "ver todos"){
      Serial.print("Primeira Pausa: ");
      Serial.print(tempo1);
      Serial.println("ms");
      Serial.print("Segunda Pausa: ");
      Serial.print(tempo2);
      Serial.println("ms");
      Serial.print("Terceira Pausa: ");
      Serial.print(tempo3);
      Serial.println("ms");
      Serial.print("Quarta Pausa: ");
      Serial.print(tempo4);
      Serial.println("ms");
    } else{
      Serial.println("Comando não reconhecido!");
    }
   
  } else if(motorSelecionado == true){
    if (comando == "c"){
      motorSelecionado = false;
      Serial.println("");
      Serial.println("");
      Serial.println("");
      Serial.println("Comando Cancelado!");
      Serial.println("Digite o número da pausa que você quer alterar");
      Serial.println("Digite 'ajuda' para ver a lista de comandos");
      Serial.println("ou 'executar' para executar o programa");
      Serial.println("lembrando que todos os comando devem se digitados sem ''");
      Serial.println("");
      Serial.println("");
      Serial.println("");
    } else {
      int novoTempo = comando.toInt();
      motorSelecionado = false;
      Serial.println("");
      switch (intervaloTempo) {
        case 1:
          tempo1 = novoTempo;
          Serial.print("Tempo primeira parada alterado para:");
          Serial.print(tempo1);
          Serial.println("ms");
        break;
        case 2:
          tempo2 = novoTempo;
          Serial.print("Tempo segunda parada alterado para:");
          Serial.print(tempo2);
          Serial.println("ms");
        break;
        case 3:
          tempo3 = novoTempo;
          Serial.print("Tempo terceira parada alterado para:");
          Serial.print(tempo3);
          Serial.println("ms");
        break;
        case 4:
          tempo4 = novoTempo;
          Serial.print("Tempo quarta parada alterado para:");
          Serial.print(tempo4);
          Serial.println("ms");
        break;
      default:
        // if nothing else matches, do the default
        // default is optional
        break;
      }
    }
 }
  comando ="";
}


Go Up