Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:39
esos videos están haciendo video y video en movimiento.
Queríamos mostrar el espacio oscilante a través de cuadrículas en movimiento y el Infinity Mirror para mostrar la sensación de espacio de manera más efectiva.
Nuestro trabajo consta de dos placas acrílicas, el frente y las placas traseras, que muestran a las personas la forma en que están agitando directamente, y las placas traseras tienen motores de 25 pasos que realmente producen movimiento.
La obra consta de un panel frontal que mostrará los destellos del espacio, un palo de madera que ejecuta el movimiento del medio, una guía para las varillas y un tablero que crea movimiento a través de motores de 25 pasos.
Los 25 picos de la red conectados a los 25 motores paso a paso producen diferentes patrones de acuerdo con los valores de codificación establecidos. Además, la compañía quería maximizar el espacio combinando acrílico transparente con película de medio espejo frontal, espejo retrovisor y espejo Infinity con luz negra. Se crean varios patrones de animación basados en olas y monótonos que se hacen en base a las olas del agua.
Suministros
Suministros
1. UV LED 12V 840cm
2. Goma blanca 12 mm 750 cm
3. Arduino mega 2560 x2
4.controlador de motor x25
5. Motor paso a paso x25
6. Cable bipolar para motor paso a paso x25
7. Cilindro de madera x25
8.pvc (9 mm) x25
9. Primavera x 25
10.acrílico 700mm * 700mm
11. La mitad de la película de espejo 1524 mm * 1 M
12 línea de pesca
13. Potencia 12V 12.5A, 12V 75A
14. polea de distribución (impresión 3d) x 25
Paso 1: planifique un gran marco
Cuando empezamos, necesitamos planificar y trazar un gran marco. por lo tanto, preparamos un archivo pdf para el marco general de acrílico y el archivo stl de la polea de sincronización (lo que los colocamos frente al motor paso a paso para el hilo de viento que puede tirar de una varilla de madera media).
Con el marco general de acrílico y la polea de sincronización, primero debemos hacer un archivo stl y una impresión 3D.
Paso 2: hacer hardware
caja1
1. Coloque el acrílico negro 2T (No. 1) en el piso y coloque el lado negro acrílico 5T (No. 2) en la parte superior. Agregue una rejilla negra acrílica 5T (No. 3) y fíjela con adhesivo acrílico.
caja2
2. Rocíe agua sobre la placa acrílica transparente y cubra con una película de semi-espejo. Un medio espejo hace rodar una tarjeta para evitar que burbujee. Coloque el lateral (2) y la transparencia acrílica (1). No asegure el saliente acrílico combinado y los espejos acrílicos (No. 1) lateralmente. Fíjelo temporalmente con cinta (para reparar el hilo de pescar o renovar el interior).
Paso 3: Hacer cuadrícula
1. Una columna de madera tiene un tamaño de 12 mm. Haz un agujero en el extremo para permitir que entre el hilo de pescar.
2. Fije las placas acrílicas al otro lado de una columna de madera perforada con adhesivo.
3. Ponga una banda de goma a través de la parte posterior de un pilar de madera y coloque un resorte en él.
4.forma general
Paso 4:
1. Número de conexión de pin Arduino Mega 2560
2.dividir la electricidad en dos partes
3. Motor paso a paso y circuito del controlador del motor
4. Dos Arduino mega2560s están conectados cruzando TX y RX para la comunicación en serie.
Paso 5: Código
#incluir
StepperMulti stepper (200, 2, 3, 4, 5); // numeración del motor paso a paso StepperMulti stepper2 (200, 6, 7, 8, 9); StepperMulti stepper3 (200, 10, 11, 12, 13); StepperMulti stepper4 (200, A0, A1, A2, A3); StepperMulti stepper5 (200, A4, A5, A6, A7); StepperMulti stepper6 (200, 22, 23, 24, 25); StepperMulti stepper7 (200, 26, 27, 28, 29); StepperMulti stepper8 (200, 30, 31, 32, 33); StepperMulti stepper9 (200, 34, 35, 36, 37); StepperMulti stepper10 (200, 38, 39, 40, 41); StepperMulti stepper11 (200, 42, 43, 44, 45); StepperMulti stepper12 (200, 46, 47, 48, 49); StepperMulti stepper13 (200, 50, 51, 52, 53); uint32_t on_timer = millis (); uint32_t set_timer1 = millis (); uint32_t set_timer2 = millis (); uint32_t set_timer3 = millis (); uint32_t set_timer4 = millis (); uint32_t set_timer5 = millis (); uint32_t set_timer6 = millis (); uint32_t set_timer7 = millis (); uint32_t set_timer8 = millis (); uint32_t set_timer9 = millis (); uint32_t set_timer10 = millis (); int count = 0; int init_set_speed
configuración vacía ()
Serial1.begin (115200); // comunicación serial Serial.begin (9600); stepper.setSpeed (init_set_speed); stepper2.setSpeed (init_set_speed); stepper3.setSpeed (init_set_speed); stepper4.setSpeed (init_set_speed); stepper5.setSpeed (init_set_speed); stepper6.setSpeed (init_set_speed); stepper7.setSpeed (init_set_speed); stepper8.setSpeed (init_set_speed); stepper9.setSpeed (init_set_speed); stepper10.setSpeed (init_set_speed); stepper11.setSpeed (init_set_speed); stepper12.setSpeed (init_set_speed); stepper13.setSpeed (init_set_speed); } int VELOCIDAD = 200; // bucle de vacío de velocidad del motor () {///////////////////////////////////// if (millis () - set_timer1 <6000) {// El motor paso a paso 13 se mueve entre 1500 y 6000 segundos. <if (millis () - on_timer <1500) {stepper13.setStep (SPEED); } else if (millis () - on_timer <3000) {stepper13.setStep (-VELOCIDAD); // (- VELOCIDAD) significa rotación inversa} else if (millis () - on_timer <4500) {stepper13.setStep (SPEED); } else if (millis () - on_timer 1000) {Serial1.write (0x01); cuenta = 1; }} //////////////////////// if (millis () - set_timer2 1000) {if (millis () - on_timer <2500) {stepper7.setStep (VELOCIDAD); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); } else if (millis () - on_timer <4000) {stepper7.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); } else if (millis () - on_timer <5500) {stepper7.setStep (SPEED); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); } else if (millis () - on_timer <7000) {stepper7.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); } else {stepper7.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper12.setStep (0); }} else {stepper7.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper12.setStep (0); } if (millis () - set_timer2 1000) {if (millis () - on_timer <2500) {stepper2.setStep (SPEED); stepper5.setStep (-VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper7.setStep (VELOCIDAD); } else if (millis () - on_timer <4000) {stepper2.setStep (-VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper7.setStep (-VELOCIDAD); } else if (millis () - on_timer <5500) {stepper2.setStep (SPEED); stepper5.setStep (-VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper7.setStep (VELOCIDAD); } else if (millis () - on_timer <7000) {stepper2.setStep (-VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper7.setStep (-VELOCIDAD); } else {stepper2.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper7.setStep (0); }} else {stepper2.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper7.setStep (0); } /////////////////////////////////////////////// si (millis () - set_timer3 2000) {if (millis () - on_timer <3500) {stepper.setStep (SPEED); stepper2.setStep (VELOCIDAD); stepper3.setStep (VELOCIDAD); stepper4.setStep (VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); } else if (millis () - on_timer <5000) {stepper.setStep (-VELOCIDAD); stepper2.setStep (-VELOCIDAD); stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper5.setStep (-VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); } else if (millis () - on_timer <6500) {stepper.setStep (SPEED); stepper2.setStep (VELOCIDAD); stepper3.setStep (VELOCIDAD); stepper4.setStep (VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); } else if (millis () - on_timer <8000) {stepper.setStep (-VELOCIDAD); stepper2.setStep (-VELOCIDAD); stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper5.setStep (-VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); } else {stepper.setStep (0); stepper2.setStep (0); stepper3.setStep (0); stepper4.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper10.setStep (0); stepper11.setStep (0); }} else {paso a paso.setStep (0); stepper2.setStep (0); stepper3.setStep (0); stepper4.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper10.setStep (0); stepper11.setStep (0); } if (millis () - set_timer3 2000) {if (millis () - on_timer <3500) {stepper3.setStep (SPEED); stepper4.setStep (VELOCIDAD); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); stepper13.setStep (VELOCIDAD); } else if (millis () - on_timer <5000) {stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); stepper13.setStep (-VELOCIDAD); } else if (millis () - on_timer <6500) {stepper3.setStep (SPEED); stepper4.setStep (VELOCIDAD); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); stepper13.setStep (VELOCIDAD); } else if (millis () - on_timer <8000) {stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); stepper13.setStep (-VELOCIDAD); } else {stepper3.setStep (0); stepper4.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper10.setStep (0); stepper11.setStep (0); stepper12.setStep (0); stepper13.setStep (0); }} else {stepper3.setStep (0); stepper4.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper10.setStep (0); stepper11.setStep (0); stepper12.setStep (0); stepper13.setStep (0); } /////////////////////////////////// stepper.moveStep (); stepper2.moveStep (); stepper3.moveStep (); stepper4.moveStep (); stepper5.moveStep (); stepper6.moveStep (); stepper7.moveStep (); stepper8.moveStep (); stepper9.moveStep (); stepper10.moveStep (); stepper11.moveStep (); stepper12.moveStep (); stepper13.moveStep (); }
primera codificación
y..
#incluir
StepperMulti stepper (200, 2, 3, 4, 5); StepperMulti stepper2 (200, 6, 7, 8, 9); StepperMulti stepper3 (200, 10, 11, 12, 13); StepperMulti stepper4 (200, A0, A1, A2, A3); StepperMulti stepper5 (200, A4, A5, A6, A7); StepperMulti stepper6 (200, 22, 23, 24, 25); StepperMulti stepper7 (200, 26, 27, 28, 29); StepperMulti stepper8 (200, 30, 31, 32, 33); StepperMulti stepper9 (200, 34, 35, 36, 37); StepperMulti stepper10 (200, 38, 39, 40, 41); StepperMulti stepper11 (200, 42, 43, 44, 45); StepperMulti stepper12 (200, 46, 47, 48, 49); StepperMulti stepper13 (200, 50, 51, 52, 53); uint32_t on_timer = millis (); uint32_t set_timer1 = millis (); uint32_t set_timer2 = millis (); uint32_t set_timer3 = millis (); uint32_t set_timer4 = millis (); uint32_t set_timer5 = millis (); uint32_t set_timer6 = millis (); uint32_t set_timer7 = millis (); uint32_t set_timer8 = millis (); uint32_t set_timer9 = millis (); uint32_t set_timer10 = millis (); int count = 0; int init_set_speed = 10; configuración vacía () Serial1.begin (115200); Serial.begin (9600); stepper.setSpeed (init_set_speed); stepper2.setSpeed (init_set_speed); stepper3.setSpeed (init_set_speed); stepper4.setSpeed (init_set_speed); stepper5.setSpeed (init_set_speed); stepper6.setSpeed (init_set_speed); stepper7.setSpeed (init_set_speed); stepper8.setSpeed (init_set_speed); stepper9.setSpeed (init_set_speed); stepper10.setSpeed (init_set_speed); stepper11.setSpeed (init_set_speed); stepper12.setSpeed (init_set_speed); stepper13.setSpeed (init_set_speed); } int VELOCIDAD = 200; bucle vacío () {
/////////////////////////////////////
if (millis () - set_timer1 <6000) {if (millis () - on_timer <1500) {stepper13.setStep (SPEED); } else if (millis () - on_timer <3000) {stepper13.setStep (-VELOCIDAD); } else if (millis () - on_timer <4500) {stepper13.setStep (SPEED); } else if (millis () - on_timer 1000) {Serial1.write (0x01); cuenta = 1; }} //////////////////////// if (millis () - set_timer2 1000) {if (millis () - on_timer <2500) {stepper7.setSte ㄴ p (VELOCIDAD); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); } else if (millis () - on_timer <4000) {stepper7.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); } else if (millis () - on_timer <5500) {stepper7.setStep (SPEED); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); } else if (millis () - on_timer <7000) {stepper7.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); } else {stepper7.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper12.setStep (0); }} else {stepper7.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper12.setStep (0); } if (millis () - set_timer2 1000) {if (millis () - on_timer <2500) {stepper2.setStep (SPEED); stepper5.setStep (-VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper7.setStep (VELOCIDAD); } else if (millis () - on_timer <4000) {stepper2.setStep (-VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper7.setStep (-VELOCIDAD); } else if (millis () - on_timer <5500) {stepper2.setStep (SPEED); stepper5.setStep (-VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper7.setStep (VELOCIDAD); } else if (millis () - on_timer <7000) {stepper2.setStep (-VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper7.setStep (-VELOCIDAD); } else {stepper2.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper7.setStep (0); }} else {stepper2.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper7.setStep (0); } /////////////////////////////////////////////// si (millis () - set_timer3 2000) {if (millis () - on_timer <3500) {stepper.setStep (SPEED); stepper2.setStep (VELOCIDAD); stepper3.setStep (VELOCIDAD); stepper4.setStep (VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); } else if (millis () - on_timer <5000) {stepper.setStep (-VELOCIDAD); stepper2.setStep (-VELOCIDAD); stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper5.setStep (-VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); } else if (millis () - on_timer <6500) {stepper.setStep (SPEED); stepper2.setStep (VELOCIDAD); stepper3.setStep (VELOCIDAD); stepper4.setStep (VELOCIDAD); stepper5.setStep (VELOCIDAD); stepper6.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); } else if (millis () - on_timer <8000) {stepper.setStep (-VELOCIDAD); stepper2.setStep (-VELOCIDAD); stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper5.setStep (-VELOCIDAD); stepper6.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); } else {stepper.setStep (0); stepper2.setStep (0); stepper3.setStep (0); stepper4.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper10.setStep (0); stepper11.setStep (0); }} else {paso a paso.setStep (0); stepper2.setStep (0); stepper3.setStep (0); stepper4.setStep (0); stepper5.setStep (0); stepper6.setStep (0); stepper10.setStep (0); stepper11.setStep (0); } if (millis () - set_timer3 2000) {if (millis () - on_timer <3500) {stepper3.setStep (SPEED); stepper4.setStep (VELOCIDAD); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); stepper13.setStep (VELOCIDAD); } else if (millis () - on_timer <5000) {stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); stepper13.setStep (-VELOCIDAD); } else if (millis () - on_timer <6500) {stepper3.setStep (SPEED); stepper4.setStep (VELOCIDAD); stepper8.setStep (VELOCIDAD); stepper9.setStep (VELOCIDAD); stepper10.setStep (VELOCIDAD); stepper11.setStep (VELOCIDAD); stepper12.setStep (VELOCIDAD); stepper13.setStep (VELOCIDAD); } else if (millis () - on_timer <8000) {stepper3.setStep (-VELOCIDAD); stepper4.setStep (-VELOCIDAD); stepper8.setStep (-VELOCIDAD); stepper9.setStep (-VELOCIDAD); stepper10.setStep (-VELOCIDAD); stepper11.setStep (-VELOCIDAD); stepper12.setStep (-VELOCIDAD); stepper13.setStep (-VELOCIDAD); } else {stepper3.setStep (0); stepper4.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper10.setStep (0); stepper11.setStep (0); stepper12.setStep (0); stepper13.setStep (0); }} else {stepper3.setStep (0); stepper4.setStep (0); stepper8.setStep (0); stepper9.setStep (0); stepper10.setStep (0); stepper11.setStep (0); stepper12.setStep (0); stepper13.setStep (0); } /////////////////////////////////// stepper.moveStep (); stepper2.moveStep (); stepper3.moveStep (); stepper4.moveStep (); stepper5.moveStep (); stepper6.moveStep (); stepper7.moveStep (); stepper8.moveStep (); stepper9.moveStep (); stepper10.moveStep (); stepper11.moveStep (); stepper12.moveStep (); stepper13.moveStep (); }
segunda codificación
Paso 6: antes de codificar…
Debería agregar una nueva biblioteca relacionada con motores paso a paso.
Entonces ingresa a este sitio y descarga una nueva biblioteca.
blog.danggun.net/2092
Paso 7: comunicación en serie
Tienes que hacer dos mega-telecomunicaciones arduino.
si (cuenta_inicio == 0) {
int Data = Serial1.read (); Serial.println (Datos); if (Datos == 0x01) {start_count = 1; }
En primer lugar, necesitamos esta codificación en Maine Arduino Mega.
if (count == 0) {if (millis () - set_timer1> 1000) {Serial1.write (0x01); cuenta = 1; }
Arduino Mega, que recibe comunicaciones en serie, necesita esta codificación.
La primera codificación se coloca donde debe moverse el segundo aduino.
Recomendado:
Hacer un reloj de espejo infinito: 15 pasos (con imágenes)
Hacer un reloj con espejo infinito: en un proyecto anterior construí un espejo infinito, donde mi objetivo final era convertirlo en un reloj. (Haz un Espejo Infinito de Colores) No busqué eso después de construirlo porque, aunque se veía genial, había algunas cosas con
Haga un cubo de espejo infinito FÁCIL - SIN impresión 3D y SIN programación: 15 pasos (con imágenes)
Haga un cubo de espejo infinito FÁCIL | SIN impresión 3D ni programación: a todo el mundo le gusta un buen cubo infinito, pero parece que sería difícil de hacer. Mi objetivo para este Instructable es mostrarte paso a paso cómo hacer uno. No solo eso, sino que con las instrucciones que te estoy dando, podrás hacer una o
Reloj Vortex: un reloj de pulsera con espejo infinito: 10 pasos (con imágenes)
Vortex Watch: un reloj de pulsera con espejo infinito: el objetivo de este proyecto era crear una versión portátil de un reloj con espejo infinito. Utiliza sus LED RGB para indicar el tiempo asignando horas, minutos y segundos a las luces roja, verde y azul respectivamente y superponiendo estos tonos t
Cómo hacer un corazón de espejo infinito con Arduino y LED RGB: 8 pasos (con imágenes)
Cómo hacer un corazón de espejo infinito con Arduino y LED RGB: una vez en una fiesta, mi esposa y yo vimos un espejo infinito, y ella estaba fascinada con el aspecto y seguía diciendo ¡Quiero uno! Un buen esposo siempre escucha y recuerda, así que decidí construirle uno como regalo de San Valentín
Espejo infinito hexagonal con luces LED y cable láser: 5 pasos (con imágenes)
Espejo Hexagon Infinity con luces LED y cable láser: si está buscando crear una pieza de iluminación única, este es un proyecto realmente divertido. Debido a la complejidad, algunos de los pasos realmente requieren algo de precisión, pero hay algunas direcciones diferentes que puede seguir, dependiendo del aspecto general