Go Down

Topic: Fazer um projecto (Read 731 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");
 }
}

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy