Este tópico contém respostas, possui 2 vozes e foi atualizado pela última vez por  Diogo Zimmermann 1 mês .

Visualizando 13 posts - 1 até 13 (de 13 do total)
  • Autor
    Posts
  • #159446

    wal.holiver
    Participante

    Boa tarde.

    Desculpe se abri esse tópico incorretamente, mas eu precisava de uma ajuda com esse projeto. Não consigo fazer mais de 1 servo funcionar. Um interfere no outro. Com apenas 1 funciona corretamente. Agradeceria muito uma ajuda.

    0
    #159693

    Boa tarde!

    Então, esse módulo ponte H L298N não suporta movimentação de motores servo.

    O link abaixo tem um projetinho que controla 3 motores servos, talvez te dê uma luz 😉

    https://www.instructables.com/id/Controlling-3-servo-motors-with-3-potentiometers-a/

     

    Abraços!

    Diogo – Equipe FilipeFlop

    1+
    #160021

    wal.holiver
    Participante

    Diogo, muito obrigado por sua atenção. Acho que não me expressei corretamente. O módulo L298N é para motores DC mesmo. O Projeto consiste em um veículo rover com esteiras, 2 motores DC e um braço robótico com 4 servos, comandados através do nrf24l01 com 4 joysticks. Com apenas 1 servo no código, tudo funciona, mas quando coloco os outros 3, dá pane geral. Poderia me dar mais essa força? Vou postar os códigos. Agradeço demais, pois é um projeto TCC.

    CÓDIGO DO CONTROLE TRANSMISSOR

    #include <SPI.h> //Interface de comunicação NF24
    #include “RF24.h” //Biblioteca de comunicação NF24

    //DEFINE PINOS DE ENTRADA
    int x_axis = A0;
    int y_axis = A1;
    int potPin = A2;
    int potPin2 = A3;
    int potPin3 = A4;
    int potPin4 = A5;

    //DEVINE VARIÁVEIS
    int xValue;
    int yValue;
    int potValue;
    int pot2Value;
    int pot3Value;
    int pot4Value;

    int data[1];

    RF24 radio(5,10); //5 E 10 SÃO OS PINOS DIGITAIS AOS QUAIS OS SINAIS CE E CSN ESTÃO CONECTADOS.

    const uint64_t pipe = 0xE8E8F0F0E1LL; //TUBO DE COMUNICAÇÃO ENTRE OS MÓDULOS NRF24L01

    void setup(void){
    Serial.begin(9600);
    radio.begin(); //ATIVAÇÃO DO MÓDULO NRF24l01.
    radio.openWritingPipe(pipe); //DEFINE O ENDEREÇO DO RECEPTOR PARA O QUAL O PROGRAMA ENVIARÁ DADOS.
    }

    void loop(){

    //ENVIO DE DADOS AO X-AXIS
    xValue = analogRead(x_axis);
    xValue = map(xValue, 0, 1023, 0, 10);
    data[0] = xValue;
    radio.write(data, 1);

    //ENVIO DE DADOS AO Y-AXIS
    yValue = analogRead(y_axis);
    yValue = map(yValue, 0, 1023, 11, 20);
    data[0] = yValue;
    radio.write(data, 1);

    //BRAÇO——————————————————————————
    //ENVIO DE DADOS PARA O SERVO1
    potValue = analogRead(potPin);
    potValue = map(potValue, 0, 1023, 21, 30); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO
    data[0] = potValue;
    radio.write(data, 1);

    //ENVIO DE DADOS PARA O SERVO2
    pot2Value = analogRead(potPin2);
    pot2Value = map(pot2Value, 0, 1023, 21, 30); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO
    data[0] = pot2Value;
    radio.write(data, 1);

    //ENVIO DE DADOS PARA O SERVO3
    pot3Value = analogRead(potPin3);
    pot3Value = map(pot3Value, 0, 1023, 21, 30); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO
    data[0] = pot3Value;
    radio.write(data, 1);

    //ENVIO DE DADOS PARA O SERVO4
    pot4Value = analogRead(potPin4);
    pot4Value = map(pot4Value, 0, 1023, 21, 30); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO
    data[0] = pot4Value;
    radio.write(data, 1);
    }

    <hr />

    CÓDIGO DO CONTROLE TRANSMISSOR
    Wal Robotics
    */

    #include <Servo.h> //BIBLIOTECA DE CONTROLE DE SERVO MOTOR
    #include <SPI.h> //INTERFACE DE COMUNICAÇÃO NRF24L01
    #include “RF24.h” //BIBLIOTECA DE CONTROLE NRF24L01

    //DEFINE OS PINOS DO MÓDULO L298N.
    //Motor A
    const int RightMotorForward = 2; // IN1
    const int RightMotorBackward = 3; // IN2
    //Motor B
    const int LeftMotorForward = 4; // IN3
    const int LeftMotorBackward = 6; // IN4

    //INSTANCIA E DEFINE OS NOMES DOS SERVOS
    Servo myServo;
    Servo myServo2;
    Servo myServo3;
    Servo myServo4;

    RF24 radio(5,10); //5 e 10 SÃO OS PINOS DIGITAIS AOS QUAIS OS SINAIS CE E CSN ESTÃO CONECTADOS.

    const uint64_t pipe = 0xE8E8F0F0E1LL; //TUBO DE COMUNICAÇÃO ENTRE OS MÓDULOS NRF24L01.

    int data[1];

    void setup(){
    pinMode(RightMotorForward, OUTPUT);
    pinMode(LeftMotorForward, OUTPUT);
    pinMode(LeftMotorBackward, OUTPUT);
    pinMode(RightMotorBackward, OUTPUT);

    //DEFINE OS PINOS DOS SERVOS
    myServo.attach(14); //A0
    //myServo2.attach(15); //A1
    //myServo3.attach(16); //A2
    //myServo4.attach(17); //A3

    radio.begin(); //ATIVA O MÓDULO NRF24L01.
    radio.openReadingPipe(1, pipe); //DETERMINA O ENDEREÇO DO MÓDULO QUE RECEBE OS DADOS.
    radio.startListening(); //ATIVA RECEPÇÃO DE DADOS DO MÓDULO TRANSMISSOR.
    }

    void loop(){
    if(radio.available()){
    radio.read(data, 1);

    if(data[0] < 11 && data[0] > 6){
    // This is backward
    // Set a Motor A backward
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, HIGH);
    // Set a Motor B backward
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, HIGH);
    }
    if(data[0] > -1 && data[0] < 4){
    // This is forward
    // Set a Motor A forward
    digitalWrite(RightMotorForward, HIGH);
    digitalWrite(RightMotorBackward, LOW);
    // Set a Motor B forward
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(LeftMotorBackward, LOW);
    }
    if (data[0] == 5){
    // Stop Motors
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, LOW);
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, LOW);
    }
    // VEÍCULO EM MARCHA RÉ
    // Set a Motor A Backward
    if(data[0] < 21 && data[0] > 16){
    digitalWrite(RightMotorForward, HIGH);
    digitalWrite(RightMotorBackward, LOW);
    // Set a Motor B Backward
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, HIGH);
    }
    // VIRAR À DIREITA
    if(data[0] > 10 && data[0] < 14){
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, HIGH);
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(LeftMotorBackward, LOW);
    }
    // VIRAR À ESQUERDA
    if(data[0] == 15){
    digitalWrite(RightMotorForward, LOW);
    digitalWrite(RightMotorBackward, LOW);
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(LeftMotorBackward, LOW);
    }
    // SERVO1 – BASE DO BRAÇO
    if(data[0] < 31 && data[0] > 21){
    int potValue = data[0];
    int potPos = map(potValue, 21, 30, 10, 170); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO 1 21,30 PARA A POSIÇÃO DO SERVO1 10,170.
    myServo.write(potPos);
    }

    // SERVO2 – ANGULO DO BRAÇO
    if(data[0] < 31 && data[0] > 21){
    int pot2Value = data[0];
    int pot2Pos = map(pot2Value, 21, 30, 10, 170); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO 2 21,30 PARA A POSIÇÃO DO SERVO2 10,170.
    myServo2.write(pot2Pos);
    }

    // SERVO3 – ALTURA DO BRAÇO
    if(data[0] < 31 && data[0] > 21){
    int pot3Value = data[0];
    int pot3Pos = map(pot3Value, 21, 30, 10, 170); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO 3 21,30 PARA A POSIÇÃO DO SERVO1 10,170.
    myServo3.write(pot3Pos);
    }

    // SERVO4 GARRA
    if(data[0] < 31 && data[0] > 21){
    int pot4Value = data[0];
    int pot4Pos = map(pot4Value, 21, 30, 10, 170); //MAPEAMENTO DA POSIÇÃO DO POTENCIÔMETRO 4 21,30 PARA A POSIÇÃO DO SERVO1 10,170.
    myServo4.write(pot4Pos);
    }
    }
    }

    0
    #160155

    Ele produz algum erro para esse “pane” ou simplesmente não funciona?

    0
    #160458

    wal.holiver
    Participante

    Não funciona. Tipo quando não se liga um terra no arduino e na fonte dos servos e eles ficam loucos de um lado para o outro. Dispara os motores também.

    0
    #161438

    Todos os servos funcionam se estão sozinhos? E como você está alimentando eles? Direto do Arduino? Um dos problemas para um servo motor se comportar erroneamente é a alimentação dele.

     

    Abraços!

    Diogo – Equipe FilipeFlop

    0
    #161616

    wal.holiver
    Participante

    Os motores estão sendo alimentados por bateria 11.2v de 3s. Os servos e arduino estão sendo alimentados por outra bateria 11.2v de 3 s com regulador de tensão para 5v.

    0
    #162492

    wal.holiver
    Participante

    Com um servo eu ligo como no esquema acima, com 4, ligo em uma fonte externa.

     

    0
    #162737

    É possível você mostrar como está ligando os 4 servos no circuito inteiro?

     

    Diogo – Equipe FilipeFlop

    1+
    #167098

    wal.holiver
    Participante

    Bom dia. Já agradecendo a atenção.

    0
    #167153

    Então,

    Já tentou fazer os quatro rodarem um por vez? No caso, faça um sketch novo e faça um código que move um de cada vez, em sequencia, em vez de usar aqueles “if” que você está usando.

     

    Abraços!

    Diogo – Equipe FilipeFlop

    0
    #167562

    wal.holiver
    Participante

    Não entendi, poderia me explicar como faço refaço esse código? Não sou muito bom em programação. Acho que o erro está justamente no código.

     

    0
    #167980

    Teste esse código e veja se eles se mexem. Caso sim, então realmente é problema com o código e não com o circuito em si:

     

    //QUADSweep
    //edited from the original code by BARRAGAN

    #include "Servo.h"

    Servo myservo; // create servo object to control a servo, a maximum of eight servo objects can be created
    Servo mysecondservo; // servo 2
    Servo mythirdservo; // servo3
    Servo myfourthservo; // servo4

    int pos = 0; // variable to store the servo position;

    void setup()
    {
    myservo.attach(9); // attaches the servo on pin 9 to the servo object
    mysecondservo.attach(10); // attaches the servo on pin 10 to the servo object
    mythirdservo.attach(8); // attaches the servo on pin 8 to the servo object
    myfourthservo.attach(11); // attaches the servo on pin 11 to the servo object
    }

    void loop()
    {
    for(pos = 0; pos < 90; pos += 1) // goes from 0 degrees to 90 degrees in steps of 1 degree { { myservo.write(pos); // tell servo to go to position in variable 'pos' mythirdservo.write(pos); // tell servo to go to position in variable 'pos' delay(40); // waits 40ms for the servo to reach the position } { mysecondservo.write(pos); // tell servo to go to position in variable 'pos' myfourthservo.write(pos); // tell servo to go to position in variable 'pos' delay(10); } } for(pos = 90; pos>=0; pos-=1) // goes from 90 degrees to 0 degrees
    {
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    mythirdservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(40); // waits 40ms for the servo to reach the position
    }
    for(pos = 90; pos>=0; pos-=1) // goes from 90 degrees to 0 degrees
    {
    mysecondservo.write(pos); // tell servo to go to position in variable 'pos'
    myfourthservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(10); // waits 10ms for the servo to reach the position
    }
    }

     

    Diogo – Equipe FilipeFlop

    0
Visualizando 13 posts - 1 até 13 (de 13 do total)

Você deve fazer login para responder a este tópico.