Diferencia entre revisiones de «Mecanismo de exposición para Láminas - Matilde, Andrés, Carla, Alejandra»
Sin resumen de edición |
|||
(No se muestran 15 ediciones intermedias de 4 usuarios) | |||
Línea 2: | Línea 2: | ||
|Título=Mecanismo de exposición para Láminas | |Título=Mecanismo de exposición para Láminas | ||
|Año=2022 | |Año=2022 | ||
|Imagen=Proyecto Final de Interacción y Performatividad Foto1.jpeg | |||
|Palabras Clave=objetoeducativo | |Palabras Clave=objetoeducativo | ||
}} | }} | ||
Línea 17: | Línea 18: | ||
}} | }} | ||
{{#widget:Vimeo|id=722744135}} | |||
=Objetivo del Proyecto= | |||
El desafío para este proyecto es el de enseñar de manera visual cómo utilizar Arduino. Para esto propusimos realizar un mecanismo útil para los alumnos que utilicen la sala de MadLab en el -1 del edificio Matta 79. Este mecanismo consiste en una piezas de maderas que se desplazan y pivotean por un riel de alambre que cruza la sala, para así poder colgar de manera ordenada las láminas expositivas. Su movimiento lineal las extiende y recoge, el movimiento de pivote las expone en forma perpendicular al eje y las vuelve a colocar de manera paralela cuando este se desea recoger. Es manejado con dos motores, uno para cada tipo de movimiento. | |||
=Materialización= | |||
Para la realización de este proyecto se utilizó | |||
-Madera | |||
-Rodamientos | |||
-Tuercas | |||
-Tornillos | |||
-Tela | |||
-Router CNC | |||
-Arduino uno | |||
-Motores Steper | |||
-Botones | |||
-Cable | |||
-Fuente de poder | |||
-Controladores | |||
=Programaciones del Proyecto= | =Programaciones del Proyecto= | ||
== | ==Programación de botones== | ||
===Comprobar el estado de dos botones=== | |||
En un principio necesiamos saber el estado de los materiales a usar, por lo cual se crea un código de programación sencillo, el cual consiste en visualizar la lectura que reciben los botones al ser presionados. Se adjunta el código a continuación. | En un principio necesiamos saber el estado de los materiales a usar, por lo cual se crea un código de programación sencillo, el cual consiste en visualizar la lectura que reciben los botones al ser presionados. Se adjunta el código a continuación. | ||
<pre><nowiki> | |||
const int boton1 = 2; //botón uno al pin 2 | |||
const int boton2 = 4;//botón dos al pin 4 | |||
int stateButton1 = 0; //estado del boton 1 | |||
int stateButton2 = 0;//estado del boton 2 | |||
// the setup routine runs once when you press reset: | |||
void setup() { | |||
// initialize serial communication at 9600 bits per second: | |||
Serial.begin(9600); | |||
// make the pushbutton's pin an input: | |||
pinMode(boton1, INPUT); | |||
pinMode(boton2, INPUT); | |||
} | |||
// the loop routine runs over and over again forever: | |||
void loop() { | |||
stateButton1 = digitalRead(boton1); | |||
stateButton2 = digitalRead(boton2); | |||
if (stateButton1) { | |||
Serial.println("boton 1 presionado");//si el botón uno está presionado entonces se comunica al puerto serial el mensaje "boton 1 presionado" | |||
} | |||
if (stateButton2) { | |||
Serial.println("boton 2 presionado");//si el botón dos está presionado entonces se comunica al puerto serial el mensaje "boton 2 presionado" | |||
} | |||
</nowiki></pre> | |||
==Programación de los motores ''Stepper''== | |||
===Comprobar estado del motor=== | |||
===Activar dos Steppers con dos botones=== | |||
Luego de comprobar que los dos botones recibían información correctamente, se pudo pasar al siguiente paso el cual consistía en agregar dos motores ''Stepper'', necesarios para activar el mecanismo sobre los rieles que moverían tanto dirección como ubicación de las láminas a colgar. Para esto se crea un código de programación que permita que con dos botones (uno especifico para cada motor) accionar el movimiento de estos. Con el primer ''click'' se activaría la rotación del motor, y con un segundo ''click'' (en el mismo botón) se activaría nuevamente la rotación del motor pero en sentido contrario, permitiendo la apertura y cierre de las láminas. | |||
<pre><nowiki> | <pre><nowiki> | ||
/ | const int stepPin = 6; // pin de conexión al arduino motor 1 | ||
const int dirPin = 9; // pin de conexión al arduino motor 1 | |||
const int enPin = 10; // pin de conexión al arduino motor 1 | |||
const int stepPin2 = 5; // pin de conexión al arduino motor 2 | |||
const int dirPin2 = 11; // pin de conexión al arduino motor 2 | |||
const int enPin2 = 12; // pin de conexión al arduino motor 2 | |||
const int boton1 = 2; | |||
const int boton2 = 4; | |||
int total = 1000; // tiempo dividido por unidadtiempo | |||
int total2 = 1000; // tiempo dividido por unidadtiempo | |||
int stateButton1 = 0; //estado del boton 1 | |||
int stateButton2 = 0;//estado del boton 2 | |||
// the setup routine runs once when you press reset: | // the setup routine runs once when you press reset: | ||
Línea 40: | Línea 117: | ||
Serial.begin(9600); | Serial.begin(9600); | ||
// make the pushbutton's pin an input: | // make the pushbutton's pin an input: | ||
pinMode( | pinMode(boton1, INPUT); | ||
pinMode( | pinMode(stepPin, OUTPUT); | ||
pinMode(dirPin, OUTPUT); | |||
pinMode(enPin, OUTPUT); | |||
digitalWrite(enPin, LOW); | |||
pinMode(boton2, INPUT); | |||
pinMode(stepPin2, OUTPUT); | |||
pinMode(dirPin2, OUTPUT); | |||
pinMode(enPin2, OUTPUT); | |||
digitalWrite(enPin2, LOW); | |||
} | |||
void giro(int revoluciones, int motor) { //funcion que define las revoluviones y el motor | |||
int dirPIN; | |||
int stepPIN; | |||
if (motor == 1) { //definicion motor 1 igual a "1" | |||
dirPIN = 9; | |||
stepPIN = 6; | |||
} | |||
else if (motor == 2) { //definicion motor 2 igual a "2" | |||
dirPIN = 11; | |||
stepPIN = 5; | |||
} | |||
digitalWrite(dirPIN, HIGH); // sentido de giro del motor a la derecha | |||
for (int x = 0; x < revoluciones; x++) { | |||
digitalWrite(stepPIN, HIGH); | |||
delayMicroseconds(total2); | |||
digitalWrite(stepPIN, LOW); | |||
delayMicroseconds(total2); | |||
} | |||
} | } | ||
// the loop routine runs over and over again forever: | // the loop routine runs over and over again forever: | ||
void loop() { | void loop() { | ||
if( | stateButton1 = digitalRead(boton1); | ||
Serial.println(" | stateButton2 = digitalRead(boton2); | ||
//giro del motor1 al presionar el boton 1 | |||
if (stateButton1 == HIGH) { | |||
Serial.println("boton 1 presionado ");//mensaje serial para boton 1 | |||
Serial.println("motor 1 funcionando ");//mensaje serial para motor 1 | |||
giro(1200, 1); | |||
} | |||
//giro del motor1 al presionar el boton 2 | |||
if (stateButton2 == HIGH) { | |||
Serial.println("boton 1 presionado ");//mensaje serial para boton 2 | |||
Serial.println("motor 1 funcionando ");//mensaje serial para motor 2 | |||
giro(1200, 2); | |||
} | |||
else { | |||
Serial.println("No se ha presionado ningun boton ");//mensaje serial para indicar que no se ha presionado nada | |||
Serial.println("No hay motores funcionando ");//mensaje serial para indicar que no hay motores funcionando | |||
digitalWrite(dirPin, LOW); | |||
digitalWrite(stepPin, LOW); | |||
} | |||
} | } | ||
</nowiki></pre> | </nowiki></pre> | ||
===Controlar el giro izquierdo y el giro derecho de cada motor=== | |||
Si bien, la recepción de información de los botones hacia los motores era correcta, ahora se presenta el desafío de controlar la revolución del movimiento izquierdo y derecho de cada motor, pero obteniendo esta información solo de un botón. Se adjunta el código a continuación. | |||
<pre><nowiki> | <pre><nowiki> | ||
Línea 79: | Línea 201: | ||
const int dirPin2 = 11; // pin de conexión al arduino motor 2 | const int dirPin2 = 11; // pin de conexión al arduino motor 2 | ||
const int enPin2 = 12; // pin de conexión al arduino motor 2 | const int enPin2 = 12; // pin de conexión al arduino motor 2 | ||
const int boton1 = 2; | |||
const int boton2 = 4; | |||
//Valores editables | //Valores editables | ||
Línea 88: | Línea 213: | ||
int total2=1000; // tiempo dividido por unidadtiempo | int total2=1000; // tiempo dividido por unidadtiempo | ||
int stateButton1 = 0; //estado del boton 1 | |||
int stateButton2 = 0;//estado del boton 2 | |||
// digital pin 2 has a pushbutton attached to it. Give it a name: | |||
//int pushButton1 = 2; | |||
//int pushButton2 = 4; | |||
bool flag; | |||
Línea 99: | Línea 227: | ||
Serial.begin(9600); | Serial.begin(9600); | ||
// make the pushbutton's pin an input: | // make the pushbutton's pin an input: | ||
pinMode( | pinMode(boton1, INPUT); | ||
pinMode(stepPin,OUTPUT); | pinMode(stepPin,OUTPUT); | ||
pinMode(dirPin,OUTPUT); | pinMode(dirPin,OUTPUT); | ||
Línea 106: | Línea 234: | ||
pinMode( | pinMode(boton2, INPUT); | ||
pinMode(stepPin2,OUTPUT); | pinMode(stepPin2,OUTPUT); | ||
pinMode(dirPin2,OUTPUT); | pinMode(dirPin2,OUTPUT); | ||
Línea 112: | Línea 240: | ||
digitalWrite(enPin2,LOW); | digitalWrite(enPin2,LOW); | ||
} | |||
void giro_izq(int revoluciones,int motor){ | |||
int dirPIN; | |||
int stepPIN; | |||
if(motor==1){ | |||
dirPIN = 9; | |||
stepPIN = 6; | |||
} | |||
else if(motor==2){ | |||
dirPIN = 11; | |||
stepPIN = 5; | |||
} | |||
digitalWrite(dirPIN,LOW); // sentido de giro del motor a la izquierda | |||
for(int x = 0; x < revoluciones; x++) { | |||
digitalWrite(stepPIN,HIGH); | |||
delayMicroseconds(total2); | |||
digitalWrite(stepPIN,LOW); | |||
delayMicroseconds(total2); | |||
} | |||
} | |||
void giro_dr(int revoluciones, int motor){ //funcion que define las revoluviones y el motor | |||
int dirPIN; | |||
int stepPIN; | |||
if(motor==1){ //definicion motor 1 igual a "1" | |||
dirPIN = 9; | |||
stepPIN = 6; | |||
} | |||
else if(motor==2){//definicion motor 2 igual a "2" | |||
dirPIN = 11; | |||
stepPIN = 5; | |||
} | |||
digitalWrite(dirPIN,HIGH); // sentido de giro del motor a la derecha | |||
for(int x = 0; x < revoluciones; x++) { | |||
digitalWrite(stepPIN,HIGH); | |||
delayMicroseconds(total2); | |||
digitalWrite(stepPIN,LOW); | |||
delayMicroseconds(total2); | |||
} | |||
} | } | ||
// the loop routine runs over and over again forever: | // the loop routine runs over and over again forever: | ||
void loop() { | void loop() { | ||
stateButton1 = digitalRead(boton1); | |||
stateButton2 = digitalRead(boton2); | |||
//giro del motor1 al presionar el boton 1 | |||
if (stateButton1 == HIGH) { | |||
flag=!flag; // variante que resulta contraria a si misma | |||
if(flag==0){ | |||
giro_izq(1200,1); | |||
} | |||
else if(flag==1){ | |||
giro_dr(1200,1); | |||
} | |||
} | } | ||
//giro del motor1 al presionar el boton 2 | |||
if (stateButton2 == HIGH){ | |||
flag=!flag; | |||
if(flag==0){ | |||
giro_izq(1200,2); | |||
} | |||
else if(flag==1){ | |||
giro_dr(1200,2); | |||
} | |||
} | |||
else{ | |||
digitalWrite(dirPin,LOW); | |||
digitalWrite(stepPin,LOW); | |||
} | |||
} | |||
</nowiki></pre> | |||
==Esquema Gráfico de conexión== | |||
[[Archivo:Dibujo esquematico de conexiones arduino.jpg]] |
Revisión actual - 01:02 22 jun 2022
Mecanismo de exposición para Láminas, 2022 | |
Palabras Clave | objetoeducativo |
Título | Mecanismo de rieles de exposición para Láminas |
---|---|
Tipo de Proyecto | Proyecto de Curso |
Palabras Clave | Arduino, interacción, motor, exposición |
Período | 2022-2022 |
Asignatura | Interacción y Performatividad |
Del Curso | Interacción y Performatividad 2022 |
Carreras | Diseño, Interacción y Servicios"Interacción y Servicios" is not in the list (Arquitectura, Diseño, Magíster, Otra) of allowed values for the "Carreras Relacionadas" property. |
Alumno(s) | Carla Gómez Guerra, Matilde Croxatto Ullrich, Andrés Aliaga Chandía, Alejandra Witto Royo |
Profesor | Renzo Varela |
Objetivo del Proyecto
El desafío para este proyecto es el de enseñar de manera visual cómo utilizar Arduino. Para esto propusimos realizar un mecanismo útil para los alumnos que utilicen la sala de MadLab en el -1 del edificio Matta 79. Este mecanismo consiste en una piezas de maderas que se desplazan y pivotean por un riel de alambre que cruza la sala, para así poder colgar de manera ordenada las láminas expositivas. Su movimiento lineal las extiende y recoge, el movimiento de pivote las expone en forma perpendicular al eje y las vuelve a colocar de manera paralela cuando este se desea recoger. Es manejado con dos motores, uno para cada tipo de movimiento.
Materialización
Para la realización de este proyecto se utilizó
-Madera -Rodamientos -Tuercas -Tornillos -Tela -Router CNC -Arduino uno -Motores Steper -Botones -Cable -Fuente de poder -Controladores
Programaciones del Proyecto
Programación de botones
Comprobar el estado de dos botones
En un principio necesiamos saber el estado de los materiales a usar, por lo cual se crea un código de programación sencillo, el cual consiste en visualizar la lectura que reciben los botones al ser presionados. Se adjunta el código a continuación.
const int boton1 = 2; //botón uno al pin 2 const int boton2 = 4;//botón dos al pin 4 int stateButton1 = 0; //estado del boton 1 int stateButton2 = 0;//estado del boton 2 // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(boton1, INPUT); pinMode(boton2, INPUT); } // the loop routine runs over and over again forever: void loop() { stateButton1 = digitalRead(boton1); stateButton2 = digitalRead(boton2); if (stateButton1) { Serial.println("boton 1 presionado");//si el botón uno está presionado entonces se comunica al puerto serial el mensaje "boton 1 presionado" } if (stateButton2) { Serial.println("boton 2 presionado");//si el botón dos está presionado entonces se comunica al puerto serial el mensaje "boton 2 presionado" }
Programación de los motores Stepper
Comprobar estado del motor
Activar dos Steppers con dos botones
Luego de comprobar que los dos botones recibían información correctamente, se pudo pasar al siguiente paso el cual consistía en agregar dos motores Stepper, necesarios para activar el mecanismo sobre los rieles que moverían tanto dirección como ubicación de las láminas a colgar. Para esto se crea un código de programación que permita que con dos botones (uno especifico para cada motor) accionar el movimiento de estos. Con el primer click se activaría la rotación del motor, y con un segundo click (en el mismo botón) se activaría nuevamente la rotación del motor pero en sentido contrario, permitiendo la apertura y cierre de las láminas.
const int stepPin = 6; // pin de conexión al arduino motor 1 const int dirPin = 9; // pin de conexión al arduino motor 1 const int enPin = 10; // pin de conexión al arduino motor 1 const int stepPin2 = 5; // pin de conexión al arduino motor 2 const int dirPin2 = 11; // pin de conexión al arduino motor 2 const int enPin2 = 12; // pin de conexión al arduino motor 2 const int boton1 = 2; const int boton2 = 4; int total = 1000; // tiempo dividido por unidadtiempo int total2 = 1000; // tiempo dividido por unidadtiempo int stateButton1 = 0; //estado del boton 1 int stateButton2 = 0;//estado del boton 2 // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(boton1, INPUT); pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(enPin, OUTPUT); digitalWrite(enPin, LOW); pinMode(boton2, INPUT); pinMode(stepPin2, OUTPUT); pinMode(dirPin2, OUTPUT); pinMode(enPin2, OUTPUT); digitalWrite(enPin2, LOW); } void giro(int revoluciones, int motor) { //funcion que define las revoluviones y el motor int dirPIN; int stepPIN; if (motor == 1) { //definicion motor 1 igual a "1" dirPIN = 9; stepPIN = 6; } else if (motor == 2) { //definicion motor 2 igual a "2" dirPIN = 11; stepPIN = 5; } digitalWrite(dirPIN, HIGH); // sentido de giro del motor a la derecha for (int x = 0; x < revoluciones; x++) { digitalWrite(stepPIN, HIGH); delayMicroseconds(total2); digitalWrite(stepPIN, LOW); delayMicroseconds(total2); } } // the loop routine runs over and over again forever: void loop() { stateButton1 = digitalRead(boton1); stateButton2 = digitalRead(boton2); //giro del motor1 al presionar el boton 1 if (stateButton1 == HIGH) { Serial.println("boton 1 presionado ");//mensaje serial para boton 1 Serial.println("motor 1 funcionando ");//mensaje serial para motor 1 giro(1200, 1); } //giro del motor1 al presionar el boton 2 if (stateButton2 == HIGH) { Serial.println("boton 1 presionado ");//mensaje serial para boton 2 Serial.println("motor 1 funcionando ");//mensaje serial para motor 2 giro(1200, 2); } else { Serial.println("No se ha presionado ningun boton ");//mensaje serial para indicar que no se ha presionado nada Serial.println("No hay motores funcionando ");//mensaje serial para indicar que no hay motores funcionando digitalWrite(dirPin, LOW); digitalWrite(stepPin, LOW); } }
Controlar el giro izquierdo y el giro derecho de cada motor
Si bien, la recepción de información de los botones hacia los motores era correcta, ahora se presenta el desafío de controlar la revolución del movimiento izquierdo y derecho de cada motor, pero obteniendo esta información solo de un botón. Se adjunta el código a continuación.
const int stepPin = 6; // pin de conexión al arduino motor 1 const int dirPin = 9; // pin de conexión al arduino motor 1 const int enPin = 10; // pin de conexión al arduino motor 1 const int stepPin2 = 5; // pin de conexión al arduino motor 2 const int dirPin2 = 11; // pin de conexión al arduino motor 2 const int enPin2 = 12; // pin de conexión al arduino motor 2 const int boton1 = 2; const int boton2 = 4; //Valores editables int radio=3.5; // medida del radio del eje del motor en milimetros int distancia=100; // distancia de recorrido de la cuerda en milimetros int duracion=10; // tiempo del recorrido en segundos, 10 para enrollar y 10 para desenrollar int total=1000; // tiempo dividido por unidadtiempo int total2=1000; // tiempo dividido por unidadtiempo int stateButton1 = 0; //estado del boton 1 int stateButton2 = 0;//estado del boton 2 // digital pin 2 has a pushbutton attached to it. Give it a name: //int pushButton1 = 2; //int pushButton2 = 4; bool flag; // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(boton1, INPUT); pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); pinMode(enPin,OUTPUT); digitalWrite(enPin,LOW); pinMode(boton2, INPUT); pinMode(stepPin2,OUTPUT); pinMode(dirPin2,OUTPUT); pinMode(enPin2,OUTPUT); digitalWrite(enPin2,LOW); } void giro_izq(int revoluciones,int motor){ int dirPIN; int stepPIN; if(motor==1){ dirPIN = 9; stepPIN = 6; } else if(motor==2){ dirPIN = 11; stepPIN = 5; } digitalWrite(dirPIN,LOW); // sentido de giro del motor a la izquierda for(int x = 0; x < revoluciones; x++) { digitalWrite(stepPIN,HIGH); delayMicroseconds(total2); digitalWrite(stepPIN,LOW); delayMicroseconds(total2); } } void giro_dr(int revoluciones, int motor){ //funcion que define las revoluviones y el motor int dirPIN; int stepPIN; if(motor==1){ //definicion motor 1 igual a "1" dirPIN = 9; stepPIN = 6; } else if(motor==2){//definicion motor 2 igual a "2" dirPIN = 11; stepPIN = 5; } digitalWrite(dirPIN,HIGH); // sentido de giro del motor a la derecha for(int x = 0; x < revoluciones; x++) { digitalWrite(stepPIN,HIGH); delayMicroseconds(total2); digitalWrite(stepPIN,LOW); delayMicroseconds(total2); } } // the loop routine runs over and over again forever: void loop() { stateButton1 = digitalRead(boton1); stateButton2 = digitalRead(boton2); //giro del motor1 al presionar el boton 1 if (stateButton1 == HIGH) { flag=!flag; // variante que resulta contraria a si misma if(flag==0){ giro_izq(1200,1); } else if(flag==1){ giro_dr(1200,1); } } //giro del motor1 al presionar el boton 2 if (stateButton2 == HIGH){ flag=!flag; if(flag==0){ giro_izq(1200,2); } else if(flag==1){ giro_dr(1200,2); } } else{ digitalWrite(dirPin,LOW); digitalWrite(stepPin,LOW); } }