Go Down

Topic: Servomotores controlados con pulsador (Read 633 times) previous topic - next topic

Castle58

Buen día, soy nuevo en el mundo de Arduino, estoy trabajando en un proyecto que requiere dos servomotores que al oprimir el pulsador (solo un toque ) lleve a los 2 servomotores  de posición angulo 0 a 120 grados. Y al volver a oprimir el pulsador regresen a posición 0.
He encontrado post y videotutorial pero solo hay que este oprimido el pulsador... Y no son estables funcionan por un momento... :(
Pienso que será algo sencillo, pero no lo he logrado..
Podrían ayudarme ???? Perdon si no va aquí el post...  Gracias de antemano...

Jopapa

Ayudaria bastante (a ti) si pusieras el código que has usado

Jopapa

Castle58

Gracias he usado el siguiente codigo, esto lo hice para hacer la prueba solo en un servo.

#include <Servo.h>

int buttonPin =2;
Servo myservo;

int buttonState = 0;
boolean state;

void setup(){
  myservo.attach(9);
  pinMode(buttonPin, INPUT);
}

void loop(){
  buttonState = digitalRead(buttonPin);
 
  if (buttonState == HIGH ){
    if (state == false){
      state = true;
    }
    else{
      state = false;
    }
  }
  if (state==true){
    myservo.write(60);
  }
  else{
    myservo.write(120);
  }
}


Leo17

hola no e usado los servomotores en arduino, pero viendo tu programa veo dos opciones, una seria la que te pongo debajo y la otra seria usando interrupciones

#include <Servo.h>

int buttonPin =2;
Servo myservo;

int buttonState = 0;
byte posicion;

void setup(){
  myservo.attach(9);
  pinMode(buttonPin, INPUT);
}

void loop(){
  buttonState = digitalRead(buttonPin);
 

  if (buttonState == HIGH  && posicion==2){ //pregunta por la variable posición para saber en que posición esta y realizar el cambio
    myservo.write(60);
   posicion=1;// esta varable seria para saber en que posición esta el motor
delay(20); // este tiempo debe ser suficiente para presionar y soltar el botón , de lo contrario estaría entrando varias veces mientras este pulsado y seria al asar la posición que tomaría
  }
  else if (buttonState == HIGH  && posicion==1){
    myservo.write(120);
posicion=2;
delay(20);
  }
}

Jopapa

El programa no te funciona porque cada vez que pulsa el botón se ejecuta el IF y siempre ocurre lo mismo.
Prueba esto
Code: [Select]
#include <Servo.h>

int buttonPin =2;
Servo myservo;

int buttonState = 0;
boolean state;

void setup(){
  Serial.begin(9600);
  myservo.attach(9);
  pinMode(buttonPin, INPUT);
}

void loop(){
  buttonState = digitalRead(buttonPin);
  delay(200);
  if (buttonState == HIGH ){
    state = !state;
  }
  Serial.print(buttonState);
  Serial.println(state);

  if (state==true){
    myservo.write(60);
  }
  else{
    myservo.write(120);
  }
}


Cada vez que pulsas, el valor state cambia al contrario. El delay es para evitar rebotes del pulsador.

Jopapa
www.jopapa.me

Castle58

Muchas Gracias por las respuestas, ahora me he metido en un lio, ya me vuelvo loco con todo lo que sucede  :smiley-eek-blue:.... les cuento:

Estaba con la placa Leonardo y cuando hacia todas las pruebas con los servos que son marca TowerPro MG996R ps andaba bien por momentos, pero hasta que se desconectaba a cada poco la conexion USB. y ya no funcionaba ningun codigo  =( pense que la placa no estaba bien

Por lo que me hice del arduino UNO pensando que era la placa.  Y me compre un regulador de esos adaptadores que puedes poner de 3.. 6.. 9 volt. y tiene 1 AMP. y lo conecte en la entrada auxiliar de la placa Arduino Uno..
Al realizar la prueba, con solo conectar la tierra del servo o corriente PUMMM!!!! se desconecta el USB... y no marcha bien el codigo =(. Solo hago contacto ya sea tierra o corriente 5v de la placa y el led "L" se apaga y conecta y desconecta  =(..... El servo de prueba esta suelto y no carga nada... para que demande mucha energía...
Ahora he visto unos post con servos alimentados externamente... pero no se como hacerlo solo hay texto  =(..... y no se si esa sea una solución o saber que estará pasando....
Una cosa más el arduino leonardo hacia mover los servos por un momento y con el Uno de inmediato se resetea...????

Agradezco a todos los que responden, por su ayuda y nos tienen paciencia a nosotros los novatos jeje...

Castle58

Buena tarde a todos!! Al fin solucione mi problemilla...

Le conecte un adaptador de 6 volt. directo a los servos, solo hay que tomar en cuenta, la tierra del adaptador tiene que ir conectada a la tierra GND del arduino y luego a los servos. Y funcionó el codigo.. gracias a la ayuda de Leo17 y de Jolapa...

Gracias....

Go Up