Proyecto final Objeto Educativo con Arduino

De Casiopea
Revisión del 23:04 21 jun 2022 de JavieraRuiz (discusión | contribs.) (→‎Video)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Proyecto final Objeto Educativo con Arduino


TítuloProyecto final Objeto Educativo con Arduino
Tipo de ProyectoProyecto de Curso
Palabras Claveobjetoeducativo
Período2022-2022
AsignaturaInteracción y Performatividad
Del CursoInteracción y Performatividad 2022
CarrerasDiseño
Alumno(s)Javiera Ruiz, Maite Aranda, Luciana Jorquera
ProfesorRenzo Varela

Fundamento del proyecto

Este proyecto se origina desde la intención de enseñar a otras personas cómo utilizar Arduino como una herramienta que permita realizar proyectos utilizando dispositivos y componentes electrónicos.

Se utilizo un motor Nema que gira en 2 direcciones diferentes cada una con un pulsador, y un motor stepper 28byj-48 que se mueve en una sola dirección al ser activado con un pulsador.

Se utilizaron 3 inputs (pulsadores) y hay 2 outputs (2 motores)

Diseño del objeto

Registro Fotográfico de la maqueta

 WhatsApp Image 2022-06-21 at 9.51.15 PM.jpeg WhatsApp Image 2022-06-21 at 9.51.17 PM.jpeg WhatsApp Image 2022-06-21 at 9.51.17 PM (2).jpeg

Video

Componentes del circuito

  • Arduino UNO R3
  • Fuente de poder con capacidad de transformar la corriente alterna (220V) a corriente continua (12V)
  • Driver BL-TB6560-V2.0, funcionan como unión entre el arduino y el motor.
  • Protoboard
  • Motor stepper NEMA 23
  • Motor stepper 28byj-48
  • 3 pulsadores
  • Resistencias, cableado
  • Software Arduino, programación en lenguaje C++

Circuito

Interaccion y performatividad circuito-01.png

Código


#include <Stepper.h>      // incluye libreria stepper

float radio=3.5; // medida del radio del eje del motor en milimetros
float distancia=100; // distancia de recorrido de la cuerda en milimetros
float duracion=5; // tiempo del recorrido en segundos, 10 para enrollar y 10 para desenrollar

//botones
const int  boton1 = 3; //definir valor del pin del boton1
const int  boton2 = 4; //definir valor del pin del boton2
const int  boton3 = 5; //definir valor del pin del boton3
int stateButton = 0; //definir estado del boton 1
int stateButton2 = 0; //definir estado del boton 2
int stateButton3 = 0; //definir estado del boton 3

Stepper motor1(2048, 8, 9, 10, 11);   // pasos completos motor 1
const int stepPin = 6; // pin de conexion al arduino motor 2
const int dirPin = 12; // p in de conexion al arduino motor 2
const int enPin = 13; // pin de conexion al arduino motor 2

float unidadtiempo=(0.0455/radio); // constante dividida por el radio del eje del motor
float total=(duracion/(0.0455/radio)); // tiempo dividido por unidadtiempo
float perimetro=(2*PI*radio); // perimetro del espesor del eje del motor
float calculo1=(distancia/perimetro); // calculo para saber cuantas vueltas debe dar el motor en una distancia determinada
float calculo2=(calculo1*1600); // calculo 1 por 1600 (correspondiente a una vuelta del motor)

 
void setup() {
 motor1.setSpeed(3);       // valores de 1, 2 o 3 para el motor 28byj-48
 pinMode(boton1, INPUT);
 pinMode(boton2, INPUT);
 pinMode(boton3, INPUT);
 pinMode(stepPin,OUTPUT);
 pinMode(dirPin,OUTPUT);
 pinMode(enPin,OUTPUT);
 digitalWrite(enPin,LOW);
 Serial.begin(9600);
}
 
void loop() {

  stateButton = digitalRead(boton1);
  stateButton2 = digitalRead(boton2);
  stateButton3 = digitalRead(boton3);
  
  //motor 28byj-48
  if (stateButton == HIGH){
  
  Serial.print("a");
  motor1.step(2048);         // cantidad de pasos
  delay(100); 
  
}

//motor NEMA 23

//giro del motor al presionar el boton 1
 if (stateButton2 == HIGH) {  
 digitalWrite(dirPin,HIGH); // sentido de giro del motor a la derecha
 for(int x = 0; x < calculo2; x++) { // ciclo for para mantener la duracion del ciclo
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(total);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(total);
 }
 delay(10); // un segundo de retraso
 }

 //giro del motor al presionar el boton 2
 if (stateButton3 == HIGH){  
 digitalWrite(dirPin,LOW); // sentido de giro del motor a la izquierda
 for(int x = 0; x < calculo2; x++) {
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(total);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(total);
 }
 delay(10); // un segundo de retraso
}


else{
  digitalWrite(dirPin,LOW);
  digitalWrite(stepPin,LOW); 
}
}


Código intervenido con explicaciones (en cursiva)

Los comentarios del código, relacionados a la misma línea de texto en la que se escriben, se indican con “//”

En esta sección del código, se definen variables y se declaran los pin en los que sé conectarán los cables que dirigen tanto a los botones, como a los motores

recuerda que si vas a utilizar variables diferentes a números enteros, debes iniciarlas con float


#include <Stepper.h>      // incluye libreria stepper

float radio=3.5; // medida del radio del eje del motor en milímetros
float distancia=100; // distancia de recorrido de la cuerda en milímetros
float duracion=5; // tiempo del recorrido en segundos, 5 para enrollar y 5 para desenrollar

//botones
const int  boton1 = 3; //definir valor del pin del boton1
const int  boton2 = 4; //definir valor del pin del boton2
const int  boton3 = 5; //definir valor del pin del boton3
int stateButton = 0; //definir estado del boton 1
int stateButton2 = 0; //definir estado del boton 2
int stateButton3 = 0; //definir estado del boton 3

Stepper motor1(2048, 8, 9, 10, 11);   // pasos completos motor 1
const int stepPin = 6; // pin de conexion al arduino motor 2
const int dirPin = 12; // pin de conexion al arduino motor 2
const int enPin = 13; // pin de conexion al arduino motor 2

float unidadtiempo=(0.0455/radio); //constante dividida por el radio del eje del motor
float total=(duracion/(0.0455/radio)); //tiempo dividido por unidad tiempo
float perimetro=(2*PI*radio); //perimetro del espesor del eje del motor
float calculo1=(distancia/perimetro); // calculo para saber cuantas vueltas debe dar el motor en una distancia determinada
float calculo2=(calculo1*1600); // calculo 1 por 1600 (correspondiente a una vuelta del motor)
Las instrucciones escritas dentro de la sección “void setup()” se ejecutan una única vez, al iniciar el arduino.


En esta sección del código, se establecen las configuraciones de la placa, es decir, se definen los pines de entrada (input) o salida (output).También se configuran parámetros como velocidad o frecuencias. En este caso, se establece que los botones 1, 2 y 3 son input, y los motores son output. También se establece la velocidad con la que gira el motor 28byj-48


void setup() {
 motor1.setSpeed(3); // velocidad, valores de 1, 2 o 3 para el motor 28byj-48
 pinMode(boton1, INPUT);
 pinMode(boton2, INPUT);
 pinMode(boton3, INPUT);
 pinMode(stepPin,OUTPUT);
 pinMode(dirPin,OUTPUT);
 pinMode(enPin,OUTPUT);
 digitalWrite(enPin,LOW);
 Serial.begin(9600);
}
 

El código escrito dentro de la sección “void loop()” se ejecuta inmediatamente después de las sección “void setup()” de manera infinita, hasta que se interrumpe la alimentación del arduino. Esto significa, que el código se ejecuta completo desde la primera línea de código hasta la última, y una vez alcanzada esta, empieza nuevamente desde la primera línea de código, y así en un bucle.


void loop() {

  stateButton = digitalRead(boton1); //relación entre el estado del botón y el estado de presión del botón 
  stateButton2 = digitalRead(boton2);
  stateButton3 = digitalRead(boton3);
  
 //programación motor 28byj-48 con librería stepper
  if (stateButton == HIGH){ //Si el boton1 esta presionado, se ejecutan las siguientes lineas de codigo
  
  Serial.print("a");
  motor1.step(2048);  // cantidad de pasos
  delay(100); 
  
}



Los condicionales if/else, son una estructura de control, que nos permite tomar ciertas decisiones en el desarrollo del código, es decir, nos permiten determinar qué acciones se ejecutan al existir o no cierta condición. Se comienza escribiendo el condicional if, luego entre paréntesis la condición, se abren las llaves, se escribe el código a ejecutar si la condición establecida anteriormente es verdadera y finalmente se cierran los paréntesis de llave. Else funciona de la misma manera, solo que se refiere a lo que ocurrirá si la condición definida por if es falsa.

La señal step (stepPin) produce un impulso corto que indica que el motor debe hacer un paso con una longitud y una dirección predefinidas. La señal direction (dirPin) determina la dirección del movimiento (por ejemplo, HIGH hacia adelante, LOW hacia atrás)


//programación del motor NEMA 23
//giro del motor al presionar el botón 1
 if (stateButton2 == HIGH) {  //Si el boton2 esta presionado, se ejecutan las siguientes lineas de codigo
 digitalWrite(dirPin,HIGH); // sentido de giro del motor a la derecha
 for(int x = 0; x < calculo2; x++) { // ciclo for para mantener la duracion del ciclo
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(total);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(total);
 }
 delay(10); // un segundo de retraso
 }

 //giro del motor al presionar el botón 2
 if (stateButton3 == HIGH){  //Si el boton3 esta presionado, se ejecutan las siguientes lineas de codigo
 digitalWrite(dirPin,LOW); // sentido de giro del motor a la izquierda
 for(int x = 0; x < calculo2; x++) { // ciclo for para mantener la duracion del ciclo
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(total);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(total);
 }
 delay(10); // un segundo de retraso
}


else{
  digitalWrite(dirPin,LOW);
  digitalWrite(stepPin,LOW); 
}
}