Pages: [1]   Go Down
Author Topic: Fazer um projecto  (Read 704 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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");
  }
}
Logged

Amparo, SP
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: