Pages: [1]   Go Down
Author Topic: Servomotores controlados con pulsador  (Read 514 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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... smiley-sad
Pienso que será algo sencillo, pero no lo he logrado..
Podrían ayudarme ???? Perdon si no va aquí el post...  Gracias de antemano...
Logged

Alicante (España)
Offline Offline
Full Member
***
Karma: 13
Posts: 245
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Jopapa
Logged

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

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

Logged

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

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

Alicante (España)
Offline Offline
Full Member
***
Karma: 13
Posts: 245
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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  smiley-cry 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 smiley-cry. Solo hago contacto ya sea tierra o corriente 5v de la placa y el led "L" se apaga y conecta y desconecta  smiley-cry..... 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  smiley-cry..... 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...
Logged

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

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

Pages: [1]   Go Up
Jump to: