Go Down

Topic: Fazer um projecto (Read 711 times) previous topic - next topic

divadfoj

olá a todos.
eu estou a iniciar-me no arduino e queria fazer o seguinte projecto:
um carro com dois motores, que andasse para frente, traz e lados... e que tivesse um servo na parte da frente para girar uma camara para cina e baixo... isto depois (camara e arduino) é ligado ao PC por USB e controlado por teclas (w,a,s,d e v,b).
mas para fazer isto preciso da vossa ajuda. encontrei um codigo de um arduino que controla dois servos será que posso meter o codigo no meu arduino?

#include <Servo.h>
int minPulse1     =  0;   // minimum servo position
int maxPulse1     =  180; // maximum servo position
int turnRate1     =  10;  // servo turn rate increment (larger value, faster rate)
int minPulse2     =  0;  // minimum servo position
int maxPulse2     =  180; // maximum servo position
int turnRate2     =  10;  // servo turn rate increment (larger value, faster rate)
int buttonPin     = 13;    // pin that the trigger will be connected to
/** The Arduino will calculate these values for you **/
int centerServo1;
int centerServo2;
int pulseWidth1;          // servo pulse width
int pulseWidth2;          // servo pulse width

Servo servo1;
Servo servo2;

void setup() {
 pinMode(buttonPin, OUTPUT);
 servo1.attach(9);
 servo2.attach(10);
 centerServo1 = maxPulse1 - ((maxPulse1 - minPulse1)/2);
 centerServo2 = maxPulse2 - ((maxPulse2 - minPulse2)/2);
 pulseWidth1 =  centerServo1;
 pulseWidth2 =  centerServo2;
 Serial.begin(9600);      // opens serial port, sets data rate to 9600 bps
 Serial.println("      Arduino Serial Servo Control");
 Serial.println("Press a, s, d, or w to move, spacebar to center, and f to fire");
 Serial.println();
}

void loop() {

 // check for serial input
 if (Serial.available() > 0) {

   int data = Serial.read();       // read the incoming byte:
   digitalWrite(buttonPin, LOW);  // turn the pin off on any incoming data
   switch(data)
   {
     case 'a' :  pulseWidth1 = pulseWidth1 - turnRate1;  break;
     case 'd' :  pulseWidth1 = pulseWidth1 + turnRate1;  break ;
     case ' ' :  pulseWidth1 = pulseWidth2 = centerServo1;  break;
     case 's' :  pulseWidth2 = pulseWidth2 - turnRate1;  break;
     case 'w' :  pulseWidth2 = pulseWidth2 + turnRate1;  break ;
     case 'f' :  digitalWrite(buttonPin, HIGH); delay (1000); digitalWrite(buttonPin, LOW); break;

   }
   // stop servo pulse at min and max
   if (pulseWidth1 > maxPulse1) { pulseWidth1 = maxPulse1; }
   if (pulseWidth1 < minPulse1) { pulseWidth1 = minPulse1; }

     // stop servo pulse at min and max
   if (pulseWidth2 > maxPulse2) { pulseWidth2 = maxPulse2; }
   if (pulseWidth2 < minPulse2) { pulseWidth2 = minPulse2; }

    servo1.write(pulseWidth1);
    servo2.write(pulseWidth2);

   // print pulseWidth back to the Serial Monitor (uncomment to debug)
   Serial.print("Servo 1: ");
   Serial.print(pulseWidth1);
   Serial.print(" Servo 2: ");
   Serial.print(pulseWidth2);
   Serial.println("degrees");
 }
}

Rafael Orágio

Olá divadfoj,

Analisando este código, percebi que ele controla 2 servos, sendo, teclas "a" e "d" controlam o servo 1, e as teclas "w" e "s" controlam o servo 2. Além disso ao pressionar a tecla "f", é enviado um pulso para o pino 13 com duração de 1s e logo o pulso é desligado (para que fim isto foi feito, não deu pra entender). Bom... é um código que funciona, e no seu caso, pelo que entendi, você terá uma câmera que será controlada por um servo, neste caso, você pode "enxugar" este código para ele apenas controlar somente 1 servo, e quanto à parte de controle dos motores, precisa ver como você vai querer fazer, controle de rotação, sentido, vai usar uma ponte-H para controlá-los, etc.

Abs.

divadfoj

Olá
Este codigo era para disparar foguetes. Eu quero é controlar o arduino pelo Pc e no arduino tenho 2 servos com rotaçao continua para andar... e tenho um servo de mexe a câmara para cima e para baixo.
No movimento do robot eu queria fazer tipo diferrential drive (para virar um servo anda para a frente e outro anda para tras).
Tenho é duvidas na parte da programação , que tipo de codigo é que meto para controlar o robot pelas teclas (AWSD) e de forma que ele só pare quando eu tirasse o dedo da tecla.

Se podessem postar alguns Pseudo-codes ou ajudas agradecia bastante.

Cumps Divadfoj

Go Up