Go Down

Topic: ¿Cómo podría programar un servomotor que se mueva de 0 a 180 y de 180 a 0 grados (Read 7200 times) previous topic - next topic

M0DE

Ha sido una confusión que no cunda el pánico :p , este sería el código definitivo

#include <Servo.h>

Servo myservo;

const int potPin = 2;
const int LedPin = 11;
int sensorValue;
float calibrate;
const int buttonPin = 12;         


void setup()
{
  myservo.attach(3); //Pin de señal para el servo
  pinMode(buttonPin, INPUT); // Pin de entrada para el boton
  pinMode(LedPin, OUTPUT); // Pin de salida para el led
  digitalWrite(12, HIGH);
  }

  void loop()
  {
    digitalWrite(LedPin, HIGH); //Enciende el led que indica que el aparato est´ encendido.
    sensorValue=analogRead(potPin); //Lee el porcentaje asignado en el potenciometro.
    calibrate = map(sensorValue,0,1023,5,180);
   
    if(digitalRead(buttonPin)){ //Si hay señal del boton
    myservo.write(calibrate);   //Mueve el servo los grados necesarios             
     
    } else{ //Si no, vuelve a la posicin inicial.
    myservo.write(5);                 

    }                   
  }
   
Muchas gracias Cheyenne

Cheyenne

http://cuadricopterodiyarduino.blogspot.com/

M0DE

Jejejeje me ha costado no te creas, yo y mi puta manía de empezar la casa por el tejado pero bueno ya lo voy entendiendo
muchas gracias por tu ayuda, de verdad :)

M0DE

con que transformador podría alimentar la placa arduino uno y el servo?
ahora mismo le tengo puesto uno de 7,5 voltios y 1000a pero no sé si es la adecuada o me puedo cargar el servo
estas son las características del servo

Required Pulse: 3-5 Volt Peak to Peak Square Wave
Operating Voltage: 4.8-6.0 Volts
Operating Temperature Range: -20 to +60 Degree C
Operating Speed (4.8V): 0.19sec/60° at no load
Operating Speed (6.0V): 0.15sec/60° at no load
Stall Torque (4.8V): 42 oz/in (3.0 kg/cm)
Stall Torque (6.0V): 51 oz/in (3.7 kg/cm)
Current Drain (4.8V): 7.4mA/idle, 160mA no load operating
Current Drain (6.0V): 7.7mA/idle, 180mA no load

C.Dharém

Han solucionado el problema del compañero MODE pero no el mio...

Mi problema está así:

Yo envío pulsos con unos botones que he programado en mi interfaz de C#, justamente cuando envío una letra "a" esta envía al servo por puerto serial el pulso y se mueve tal como lo he programado...

Code: [Select]
#include <Servo.h>

Servo nazza;
Servo galaxia;

int nazzaPos = 90;
int galaxiaPos = 90;

void setup() {
 
  Serial.begin (9600);
  nazza.attach(10);
  galaxia.attach(9);
  nazza.write(nazzaPos);  // Colocamos el servomotor a 90° para tomarlo de 0-90 por izquierda, y 90-180 por derecha.
  galaxia.write(galaxiaPos);
             
             }

void loop () {
 
  if (Serial.available () > 0) {
   
    int jul = Serial.read();
    int san = Serial.read();
   
    if (jul == 'a'){     // asignamos una variable "a" para mover posiciones a derecha
      nazzaPos -= 20;
      nazza.write(nazzaPos);
     
    }
   
    if(san == 'w'){  // asignamos una variable "w" para mover posiciones abajo
   
    galaxiaPos -= 20;
    galaxia.write(galaxiaPos);
    }
   
  if (jul == 'b'){       // asignamos una variable "b" para mover posiciones a izquierda.
    nazzaPos += 20;
   nazza.write(nazzaPos);
  }
 
  if (san == 's'){  // asignamos una variable "s" para mover posiciones arriba
  galaxiaPos +=20;
  galaxia.write(galaxiaPos);
 
  }
 
  if (jul == 'z'){     // ciclo For de recorrido izquierda derecha.
 
    for(nazzaPos = 0; nazzaPos < 180; nazzaPos += 20)  // movemos de posición el servomotor de 0 grados a 180°
  {                                  // en pasos de 20 grados
    nazza.write(nazzaPos);              // hacemos que el servo vaya a la posición "pos"
    delay(15);                       //  espera 15 milisegundos al servo para reiterar su posición
  }
  for(nazzaPos = 180; nazzaPos>=1; nazzaPos-=20)     // movemos el motor de
  {                               
    nazza.write(nazzaPos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  }
 
  if (san == 'x'){
 
 
    for(galaxiaPos = 0; galaxiaPos < 180; galaxiaPos += 20)  // movemos de posición el servomotor de 0 grados a 180°
  {                                  // en pasos de 20 grados
    galaxia.write(galaxiaPos);              // hacemos que el servo vaya a la posición "pos"
    delay(15);                       //  espera 15 milisegundos al servo para reiterar su posición
  }
  for(galaxiaPos = 180; galaxiaPos>=1; galaxiaPos-=20)     // movemos el motor de
  {                               
    galaxia.write(galaxiaPos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
 
  }
 
 
  if (jul== 'h'){
  nazza.write(nazzaPos);
  }
  }
  delay (15);
}






El problema que tengo, es que necesito que cuando mi servo esté en cualquier posición, primero se regrese a 90° en la parte central del servomotor, luego que gire  de derecha a izquierda y regrese a los 90° originales.. tanto para mi servo NAZZA como para mi servo GALAXIA..
Polytechnic University.

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