Control de servos por pulsadores

Hola comunidad en el día de hoy traigo un pequeño proyecto el cual consiste en que me ayuden a desarrollar el código.

Ya que soy nuevo en este mundo y no tengo tantos conocimientos de programación me estoy tomando la tarea de aprender para lograr más en este proyecto personal aplicable y muchos mas que vendrán en el futuro...

Consiste en controlar la apertura y cierre de dos puertas una derecha y una izquierda cada una controlada por un pulsador.

  • pulsador derecho controla apertura y cierre de la puerta derecha con sus respectivos grados en el servo y graduar la velocidad en la que se mueve el servo al llegar a ciertos grados.

  • Al igual que el pulsador y puerta izquierda en la misma placa arduino uno.

Espero haberme hecho entender y agradecería enormemente por la ayuda y porque no con una buena colaboración más adelante cuando el proyecto se aplique.

Tutoriales de sevos hay por todos lados.
Tutoriales de pulsadores también.
Buscas Arduino servo y pruebas.
Buscas Arduino pulsasdor y aprendes lo mismo.
Sumas y tendrás al menos una puerta, duplicas y tendras la 2da.
No uses delay() o tendrás problemas
Ve a documentación y aprende a usar millis() si te hiciera falta.

Lee las normas y postea adecuadamente códigos y esquemas/fotos.

1 Like

claro me he estado documentando tengo un código echo pero al momento de duplicarlo para la otra puerta las dos se disparan probare quitando el delay() por que si tiene ya lo presento

#include <Servo.h>
Servo derecho;
Servo izquierdo;

int valor, valor_antiguo, estado;
int derechoP=4;
int izquierdoP=3;
int ang;

void setup() {
  // put your setup code here, to run once:
derecho.attach(6);
izquierdo.attach(9);
pinMode (derechoP,INPUT);
pinMode (izquierdoP,INPUT);

void loop() {
  
  // accionador puerta derecho:

  valor = digitalRead(derechoP);
  if((valor==HIGH)&&(valor_antiguo==LOW)){
    estado = 1 - estado;
    
    }
    valor_antiguo = valor;
    
    //abrir puerta.
  if(estado==1){
    derecho.write(15);
    
    }
    //cerrar puerta.
  if(estado==0){
    derecho.write(0);
    }
}

este es el codigo
pero comodigo estoy apenas en este campo

Lo que veo hasta ahora esta bien!
A ver cuando agregas la otra puerta.
Supongo usas otro pulsador o es el mismo?
Podría darte la solución pero es mejor que veamos qué has hecho y trabajar sobre eso.

1 Like

son diferentes pulsadores estoy en desarrollo con documentos por Internet
déjame :pinching_hand: termino el código y lo monto y le echas un ojo
claro esta esperando aportes y correcciones :+1:

La única observación es estética pero que nos ayuda a nosotros y te ayudará a ti también a trabajar ordenadamente.
Usa Control+T para formatear el código y que luzca con la identación correcta.
Esperando el resto para observar como se comporta.

use el control+T se ve mucho mejor así luce el código hasta ahora...
claro haciendo utilización de códigos y sugerencias, adaptándolo a como quiero que funcione.
quedo asi:

#include <Servo.h>

Servo servo1, servo2;
int servo1pin = 9;
int servo2pin = 10;
int button1 = 2;
int button2 = 3;
int servo1pos = 0;
int servo2pos = 0;
unsigned long previousMillis = 0;
const long interval = 30000;
const int servo1Min = 0;
const int servo1Max = 20;
const int servo2Min = 0;
const int servo2Max = 20;

void setup() {
  servo1.write(servo1pos);
  servo2.write(servo2pos);
  servo1.attach(servo1pin);
  servo2.attach(servo2pin);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
}

void loop() {
  if (digitalRead(button1) == HIGH) {
    if (servo1pos == servo1Min) {
      servo1.write(servo1Max);
      servo1pos = servo1Max;
      previousMillis = millis();
    } else {
      servo1.write(servo1Min);
      servo1pos = servo1Min;
    }
    delay(1000); // Demora para presionar el botón de rebote
  }
  if (digitalRead(button2) == HIGH) {
    if (servo2pos == servo2Min) {
      servo2.write(servo2Max);
      servo2pos = servo2Max;
      previousMillis = millis();
    } else {
      servo2.write(servo2Min);
      servo2pos = servo2Min;
    }
    delay(1000); // Demora para presionar el botón de rebote
  }
  //Compruebe si han pasado 30 segundos y el servo está en posición abierta
  if ((servo1pos == servo1Max && millis() - previousMillis >= interval)) {
    servo1.write(servo1Min);
    servo1pos = servo1Min;
  }
  if ((servo2pos == servo2Max && millis() - previousMillis >= interval)) {
    servo2.write(servo2Min);
    servo2pos = servo2Min;
  }
}

bueno estaba tratando de hacer que los servos se movieran gradualmente cuando presionara el pulsador (apropósito utilizo pulsadores táctiles ) para el prototipo y están excelentes
bueno ahí esta que opinas
siento que tengo redundancia de información de código...!! :+1:

Si no funcionan bien los pulsadores debes usar Bounce2.h para evitar los rebotes.

#include <Arduino.h>   
#include <Servo.h>

Servo servo1, servo2;
int servo1pin = 9;
int servo2pin = 10;
int button1 = 2;
int button2 = 3;
int servo1pos = 0;
int servo2pos = 0;
unsigned long previousMillis1, previousMillis2;
const long interval = 30000;
const int servo1Min = 0;
const int servo1Max = 20;
const int servo2Min = 0;
const int servo2Max = 20;

void setup() {
  servo1.write(servo1pos);
  servo2.write(servo2pos);
  servo1.attach(servo1pin);
  servo2.attach(servo2pin);
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
}

void loop() {
  if (digitalRead(button1) == HIGH) {
    if (servo1pos == servo1Min) {
      servo1.write(servo1Max);
      servo1pos = servo1Max;
      previousMillis1 = millis();
    }
    else {
      servo1.write(servo1Min);
      servo1pos = servo1Min;
    }
    delay(100); // para evitar rebotes
   }
  if (digitalRead(button2) == HIGH) {
    if (servo2pos == servo2Min) {
      servo2.write(servo2Max);
      servo2pos = servo2Max;
      previousMillis2 = millis();
    }
    else {
      servo2.write(servo2Min);
      servo2pos = servo2Min;
    }
    delay(100); // para evitar rebotes
  }
  //Compruebe si han pasado 30 segundos y el servo está en posición abierta
  if ((servo1pos == servo1Max && millis() - previousMillis1 >= interval)) {
    servo1.write(servo1Min);
    servo1pos = servo1Min;
  }
  if ((servo2pos == servo2Max && millis() - previousMillis2 >= interval)) {
    servo2.write(servo2Min);
    servo2pos = servo2Min;
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.