Está en la página 1de 13

Adelanto proyecto integrador

Integrantes:
Maicol Andrés Vásquez Contrera
Juan Andrés Gómez Gómez
Andrés Felipe Jiménez Cervantes
Andrés Felipe Guerra Iguarán
Diego Oliveros Romero

Programa:
Ingeniería Mecatrónica

Grupo:

Profesora:
Carlos Andrés Ochoa Pertuz

Curso:
Introducción a la ingeniería mecatrónica
Diagrama esquemático de conexión:

Código del programa (explicación):

#include <Servo.h> //incluimos la librería servo

Servo myservo;
Servo myservo2; // nombramos a los servos
Servo myservo3;
Servo myservo4;

int val;
int val2; //declaramos las variables de cada servo
int val3;
int val4;

int posicion1[]= {0, 0, 0, 0};


int posicion2[]= {0, 0, 0, 0};
int posicion3[]= {0, 0, 0, 0};
Declaramos 6 matrices que
int posicion4[]= {0, 0, 0, 0}; almacenaran en 6 arreglos las
posiciones de los servos al accionar
int posicion5[]= {0, 0, 0, 0}; un interruptor
int posicion6[]= {0, 0, 0, 0};

//declaramos un contador que al inicio tendrá valor de 0. A medida que se accione


el pulsador este aumenta en 1 y guarda una posición hasta llegar a 6 y registrar
int contador_angulos=0;
seis posiciones diferentes.

// se declara una bandera booleana que al inicio tendrá valor de “falso”. Y, cuando
bool flag=false; sea verdadera las 6 posiciones guardadas y registradas en la memoria del
programa estarán listas para ejecutarse.

void setup() {
myservo.attach(2);
myservo2.attach(3);
Indicamos los pines a los que irá
myservo3.attach(4); conectado cada servo

myservo4.attach(5);
pinMode(8, INPUT_PULLUP);
Indicamos los pines a los que irán conectados los pulsadores,
pinMode(9, INPUT_PULLUP); los configuramos como entrada y usarán una resistencia pullup

pinMode(10, INPUT_PULLUP);
pinMode(7, OUTPUT); Indicamos el pin al que irá conectado el led y lo configuramos como salida

Serial.begin(9600); //iniciamos la comunicación serial con el arduino


}

void loop() {
val = analogRead(0); //el servo 1 recibirá una lectura análoga del potenciómetro conectado al pin 0

val = map(val,0,1023,0,270 //el servo 1 hará un mapeo de la señal que le envíe el potenciómetro

myservo.write(val); // el servo 1 se moverá de acuerdo con el ángulo que le indiquemos

Serial.print (" el valor del angulo del servo 1 = "); //el puerto serial imprimirá lo que
está dentro del paréntesis
Serial.println (val); //el puerto serial imprimirá los valores del ángulo del servo 1 de
acuerdo con el valor que tome este

val2 = analogRead(1); //el servo 2 recibirá una lectura análoga del potenciómetro
conectado al pin 0
val2 = map(val2,0,1023,0,270); //el servo 2 hará un mapeo de la señal que le envíe el potenciómetro

myservo2.write(val2); //el servo 2 se moverá de acuerdo al ángulo que le indiquemos

Serial.print (" el valor del angulo del servo 2 = "); //el puerto serial imprimirá lo que
está dentro del paréntesis

Serial.println (val2); //el puerto serial imprimirá los valores del ángulo del servo 2 de
acuerdo con el valor que tome este

val3 = analogRead(2); //el servo 3 recibirá una lectura análoga del potenciómetro

val3 = map(val3,0,1023,0,270); //el servo 3 hará un mapeo de la señal que le envíe el potenciómetro

myservo3.write(val3); //el servo 3 se moverá de acuerdo al ángulo que le indiquemos

Serial.print (" el valor del angulo del servo 3 = "); "); //el puerto serial imprimirá lo
que está dentro del paréntesis

Serial.println (val3); //el puerto serial imprimirá los valores del ángulo del servo 3 de
acuerdo con el valor que tome este

val4 = analogRead(3); //el servo 4 recibirá una lectura análoga del potenciómetro

val4 = map(val4,0,1023,0,270); //el servo 4 hará un mapeo de la señal que le envíe el potenciómetro

myservo4.write(val4); //el servo 4 se moverá de acuerdo al ángulo que le indiquemos


Serial.print (" el valor del angulo del servo 4 = "); //el puerto serial imprimirá lo que
está dentro del paréntesis
Serial.println (val4); //el puerto serial imprimirá los valores del ángulo del servo 4 de
acuerdo con el valor que tome este

delay(1000); //1000 milisegundos de espera antes de que el puerto serie imprima


nueva información

if (digitalRead(8)== LOW) {
contador_angulos=contador_angulos+1;
Si el pulsador conectado al pin 8 se
Serial.println("interruptor accionado"); acciona, entonces aumente el
Serial.println("angulos guardados"); contador de ángulos en 1 y prenda
por un segundo el led conectado al
digitalWrite(7, HIGH); pin 7

delay(1000);
digitalWrite(7, LOW);

if (contador_angulos == 1) {
posicion1[0]=val; Si el contador de ángulos es igual a
1, entonces registre el primer
posicion1[1]=val; arreglo de posiciones de los servos
posicion1[2]=val3; en la memoria del programa

posicion1[3]=val4;

}
if (contador_angulos == 2) {
posicion2[0]=val; Si el contador de ángulos es igual a
2, entonces registre el segundo
posicion2[1]=val2; arreglo de posiciones de los servos
posicion2[2]=val3; en la memoria del programa
posicion2[3]=val4;

}
if (contador_angulos == 3) {
Si el contador de ángulos es igual a
posicion3[0]=val;
3, entonces registre el tercer
posicion3[1]=val2; arreglo de posiciones de los servos
en la memoria del programa
posicion3[2]=val3;
posicion3[3]=val4;

}
if (contador_angulos == 4) {
posicion4[0]=val; Si el contador de ángulos es igual a
4, entonces registre el cuarto
posicion4[1]=val2; arreglo de posiciones de los servos
en la memoria del programa
posicion4[2]=val3;
posicion4[3]=val4;

if (contador_angulos == 5) {
posicion5[0]=val; Si el contador de ángulos es igual a
5, entonces registre el quinto
posicion5[1]=val2;
arreglo de posiciones de los servos
posicion5[2]=val3; en la memoria del programa

posicion5[3]=val4;

if (contador_angulos == 6) {
posicion6[0]=val; Si el contador de ángulos es igual a
6, entonces registre el sexto arreglo
posicion6[1]=val2;
de posiciones de los servos en la
posicion6[2]=val3; memoria del programa y cambie el
valor de la bandera booleana a
posicion6[3]=val4; verdadero
flag=true;

Serial.println(val);
Serial.println(val2); Imprima en el puerto serial los
ángulos que tomen los servos
Serial.println(val3);
Serial.println(val4);
Serial.println ("------------");

if (digitalRead(9)== LOW && flag==true) {


Serial.println("ejecucion de angulos guardados activada"); Si el pulsador conectado al
pin 9 se acciona y la bandera
digitalWrite(7, HIGH);
booleana tiene el valor de
delay(1000); verdadera, entonces prenda
por 1 segundo el led
digitalWrite(7, LOW); conectado al pin 7 e inicie la
secuencia(); secuencia de los ángulos

void secuencia() {
while(1) {

Serial.println("Estoy dentro de la secuencia"); Ejecute el primer arreglo de posiciones


que se registró anteriormente e indique
Serial.println("posicion 1");
en el puerto serial que se está en la
myservo.write(posicion1[0]); secuencia y espere por 5 segundos para
ejecutar el siguiente arreglo de
myservo2.write(posicion1[1]); posiciones
myservo3.write(posicion1[2]);
myservo4.write(posicion1[3]);
delay(5000);

if (digitalRead(10)== LOW) {
Si el pulsador conectado al pin 10
digitalWrite(7, HIGH); se acciona, entonces encienda por
1 segundo el led conectado al pin 7
delay(1000);
y salga de la secuencia
digitalWrite(7, LOW);
Serial.println("He salido de la secuencia");
break;
}

Serial.println("posicion 2");
myservo.write(posicion2[0]); Ejecute el segundo arreglo de
posiciones que se registró
myservo2.write(posicion2[1]);
anteriormente y espere por 5
myservo3.write(posicion2[2]); segundos antes de ejecutar el
siguiente arreglo de posiciones
myservo4.write(posicion2[3]);
delay(5000);

if (digitalRead(10)== LOW) {
Si el pulsador conectado al pin 10
se acciona, entonces encienda por
1 segundo el led conectado al pin 7
y salga de la secuencia
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(7, LOW);
Serial.println("He salido de la secuencia");
break;
}

Serial.println("posicion 3");
Ejecute el tercer arreglo de
myservo.write(posicion3[0]); posiciones que se registró
anteriormente y espere por 5
myservo2.write(posicion3[1]);
segundos antes de ejecutar el
myservo3.write(posicion3[2]); siguiente arreglo de posiciones

myservo4.write(posicion3[3]);
delay(5000);

if (digitalRead(10)== LOW) {
Si el pulsador conectado al pin 10
digitalWrite(7, HIGH);
se acciona, entonces encienda por
delay(1000); 1 segundo el led conectado al pin 7
y salga de la secuencia
digitalWrite(7, LOW);
Serial.println("He salido de la secuencia");
break;
}

Serial.println("posicion 4");
myservo.write(posicion4[0]); Ejecute el cuarto arreglo de
posiciones que se registró
myservo2.write(posicion4[1]); anteriormente y espere por 5
segundos antes de ejecutar el
myservo3.write(posicion4[2]);
siguiente arreglo de posiciones
myservo4.write(posicion4[3]);
delay(5000);

if (digitalRead(10)== LOW) {
Si el pulsador conectado al pin 10
digitalWrite(7, HIGH);
se acciona, entonces encienda por
delay(1000); 1 segundo el led conectado al pin 7
y salga de la secuencia
digitalWrite(7, LOW);
Serial.println("He salido de la secuencia");
break;
}

Serial.println("posicion 5");
Ejecute el quinto arreglo de
myservo.write(posicion5[0]);
posiciones que se registró
myservo2.write(posicion5[1]); anteriormente y espere por 5
segundos antes de ejecutar el
myservo3.write(posicion5[2]); siguiente arreglo de posiciones
myservo4.write(posicion5[3]);
delay(5000);

if (digitalRead(10)== LOW) {
digitalWrite(7, HIGH); Si el pulsador conectado al pin 10
se acciona, entonces encienda por
delay(1000);
1 segundo el led conectado al pin 7
digitalWrite(7, LOW); y salga de la secuencia

Serial.println("He salido de la secuencia");


break;
}

Serial.println("posicion 6");
myservo.write(posicion6[0]); Ejecute el sexto arreglo de
posiciones que se registró
anteriormente y espere por 5
segundos antes de ejecutar el
siguiente arreglo de posiciones
myservo2.write(posicion6[1]);
myservo3.write(posicion6[2]);
myservo4.write(posicion6[3]);
delay(5000);

if (digitalRead(10)== LOW) {
digitalWrite(7, HIGH);
delay(1000); Si el pulsador conectado al pin 10
se acciona, entonces encienda por
digitalWrite(7, LOW);
1 segundo el led conectado al pin 7
Serial.println("He salido de la secuencia"); y salga de la secuencia

break;
}
}
}

Explicación del circuito: En esta simulación se usó una placa de Arduino, 4


potenciómetros, 1 led, 3 pulsadores, 1 suministro de energía y 4 servos.
Con la placa de Arduino conectamos los otros componentes y hacemos la
respectiva programación del sistema.
Con los potenciómetros controlamos la posición a la que queremos que estén los
servos, cabe resaltar que un potenciómetro moverá al servo que se encuentre en
frente de él, y en el puerto serial aparecerá por un determinado periodo de tiempo
los ángulos en los que están ubicados cada servo.

Con el suministro de energía alimentamos a los servos para que puedan moverse.
Los pulsadores los hemos programado para que funcionen de la siguiente manera:
El pulsador 1 (o el de la derecha) nos sirve para grabar y registrar las posiciones
de los servos en la memoria de la placa. En el puerto serie aparecerá el mensaje
“ángulos guardados” cuando se haya presionado correctamente el pulsador.
También se prenderá el led que hemos incluido, como señal de que el pulsador ha
sido presionado correctamente.
El pulsador 2 (o el del medio) nos sirve para ejecutar las posiciones que
anteriormente hemos registrado y guardado en la memoria, este pulsador no
funcionará si no se han registrado antes las 6 posiciones. En el puerto serie
aparecerá el mensaje “Ejecución de ángulos guardados activada” “estoy dentro de
la secuencia” cuando se haya presionado el pulsador. También se prenderá el led
que hemos incluido, como señal de que el pulsador ha sido presionado
correctamente.
El pulsador 3 (o el de la izquierda) nos sirve para detener la secuencia de la
ejecución de los ángulos registrados. Para que el pulsador 3 funcione debe
accionarse después de que los servos terminen de moverse y justo cuando vaya a
comenzar otra ejecución de ángulos. En el puerto serial aparecerá el mensaje "he
salido de la secuencia" cuando se haya presionado correctamente, además
también se prenderá el led que hemos incluido, como señal de que el pulsador ha
sido presionado correctamente.

CAD del proyecto

Otras vistas:

También podría gustarte