Pages: 1 [2]   Go Down
Author Topic: ¿Cómo podría programar un servomotor que se mueva de 0 a 180 y de 180 a 0 grados  (Read 5472 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
God Member
*****
Karma: 7
Posts: 635
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prueba superada  smiley-wink
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
« Last Edit: July 25, 2012, 01:57:28 pm by M0DE » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 44
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: July 26, 2012, 02:40:40 am by M0DE » Logged

México
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Estudiante de Ingeniería Mecatrónica
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Polytechnic University.

Pages: 1 [2]   Go Up
Jump to: