DIY Time Control Machine

19,459

140

35

Published

Introduction: DIY Time Control Machine

About: I like to create things, handmade weapon, arduino projects, science and some crazy staff! Also I like to capturing videos about my projects and I have YouTube channel - MadGyver!

This project is about how to make a time machine! This machine looks like a glove, and can "stop" any moving subject. At first, watch a video with some demonstration and experiments, guess how it works, and then read about how to make it =)

This effect looks like better in real life (by naked eye, not through a camera), without black lines. Smooth perfect time stop effectc!! IT IS REAL "OH MY GOD" REACTION!

Step 1: All We Need

Generally this project is about Arduino, high-power LED and some tricky magic with soldering iron. Here is some list with links to Aliexpress

Step 2: Wiring

Step 3: Assembling Power Part

At first connect battery, DCDC and MOSFET. Also you need to tune DCDC to 34 V output voltage.

Step 4: Assembling Logic Part

Connect potentiometer and IMU to arduino

Step 5: Fixing on Glove

Fix all parts on glove, using cable ties and velcro strip.

Step 6: LED and Cooling Plate

Fix LED on copper plate, and don't forget to smear thermal paste between them.

Step 7: Fixing LED

Finely, place LED on it's place on glove in order:

  • Metal mount
  • Glove fiber
  • Lense
  • LED
  • Cooling plate

Step 8: Flashing Arduino

You can download sketch and schemes on project's project page on GitHub, also arduino code you can find in attached files.

Step 9: How to Control Time?

This "Time Machine" is just a stroboscope with frequency adjustment. Shake your hand in Z direction of accelerometer (fast move your hand forward), LED will be turned on. Shake again to turn it off.

Use potentiometer for coarse tuning, and glove tilt for accurate tuning. When frequency of object coincide with frequency of LED, it will "stop". And you can adjust "time" for it, tilting your hand, so object will slowly move at normal direction, or reverse. You can watch video about how it works and "freeze" some fast moving objects.

You can use this for pranks and demonstration of stroboscopic effect. Enjoy!

Share

    Recommendations

    • Water Contest

      Water Contest
    • Oil Contest

      Oil Contest
    • Creative Misuse Contest

      Creative Misuse Contest

    35 Discussions

    VERY IMPORTANT: You have to have the Arduino IDE 1.6, otherwise it wont work! Alex Gyver did not post this here! It took me weeks till I figured that out, seriously.

    With that said, the time machine is very nice and actually not that hard to do. You could go with the more expensiv and quicker way, buy all the same parts on amazon with prime (at least I have prime), which would cost me about 50€, not included the XT60 connectors, in my case li.ion batteries and the charger for your battery pack. You may need to buy some smaller srews that fit, some zip ties, if you dont have any and the copper platte, which i bought from ebay for 18€(10x10cm) .I should have bought it with the other parts, it would cost about 3€. But unfortunately I bought it when all the parts came, and I didnt want to wait for another 2-3 weeks. However, i bought all the parts on ebay for 15€, exclusive the XT60 connector, Batteries, battery charger, and screws. So if you want to do this project, do not forget about the parts i mentioned. Buy all them at once on Aliexpress or Ebay.

    IMG_20180720_162046[1].jpgIMG_20180720_162109[1].jpgIMG_20180720_162122[1].jpgIMG_20180720_162223[1].jpgIMG_20180720_162232[1].jpgIMG_20180720_162239[1].jpgIMG_20180720_162247[1].jpgIMG_20180720_162259[1].jpgIMG_20180720_162308[1].jpg
    1
    user
    HariK135

    Question 4 months ago

    Can you please give me code to do this with out an accelerometer?

    1 more answer

    u can remove all the lines that is related to MPU 6050

    he man the code is showing error plez solve it fast i am not aware about aurdino code plez correct it fast

    The error is :-

    C:\Users\hp\Desktop\sketch_apr14a\sketch_apr14a.ino: In function 'void setup()':

    sketch_apr14a:21: error: 'Wire' was not declared in this scope

    Wire.begin();

    ^

    sketch_apr14a:23: error: 'light_pin' was not declared in this scope

    pinMode(light_pin, OUTPUT);

    ^

    sketch_apr14a:25: error: 'kalmanX' was not declared in this scope

    kalmanX.setAngle(180); // Set starting angle

    ^

    sketch_apr14a:26: error: 'kalmanZ' was not declared in this scope

    kalmanZ.setAngle(180);

    ^

    C:\Users\hp\Desktop\sketch_apr14a\sketch_apr14a.ino: In function 'void loop()':

    sketch_apr14a:32: error: 'lastchange' was not declared in this scope

    if (accZ > 25000 && (millis() - lastchange > 300)) { // Z axis shake detection

    ^

    sketch_apr14a:33: error: 'flag' was not declared in this scope

    flag = !flag; // toggle light

    ^

    sketch_apr14a:37: error: 'flag' was not declared in this scope

    if (flag == 1) {

    ^

    sketch_apr14a:38: error: 'angle' was not declared in this scope

    angle = 250 - kalAngleZ; // calculate angle (with 250 degrees offset)

    ^

    sketch_apr14a:41: error: 'dark' was not declared in this scope

    dark = map(analogRead(potent_pin), 0, 1024, min_dark, max_dark);

    ^

    sketch_apr14a:41: error: 'potent_pin' was not declared in this scope

    dark = map(analogRead(potent_pin), 0, 1024, min_dark, max_dark);

    ^

    sketch_apr14a:41: error: 'min_dark' was not declared in this scope

    dark = map(analogRead(potent_pin), 0, 1024, min_dark, max_dark);

    ^

    sketch_apr14a:41: error: 'max_dark' was not declared in this scope

    dark = map(analogRead(potent_pin), 0, 1024, min_dark, max_dark);

    ^

    sketch_apr14a:42: error: 'light_pin' was not declared in this scope

    digitalWrite(light_pin, 1); // lights up

    ^

    sketch_apr14a:43: error: 'light' was not declared in this scope

    delayMicroseconds(light); // wait

    ^

    C:\Users\hp\Desktop\sketch_apr14a\sketch_apr14a.ino: In function 'void measure()':

    sketch_apr14a:65: error: 'kalmanX' was not declared in this scope

    gyroXangle += kalmanX.getRate() * ((double)(micros() - timer) / 1000000); // Calculate gyro angle using the unbiased rate

    ^

    sketch_apr14a:66: error: 'kalmanZ' was not declared in this scope

    gyroZangle += kalmanZ.getRate() * ((double)(micros() - timer) / 1000000);

    ^

    C:\Users\hp\Desktop\sketch_apr14a\sketch_apr14a.ino: In function 'void i2cWrite(uint8_t, uint8_t)':

    sketch_apr14a:73: error: 'Wire' was not declared in this scope

    Wire.beginTransmission(IMUAddress);

    ^

    sketch_apr14a:73: error: 'IMUAddress' was not declared in this scope

    Wire.beginTransmission(IMUAddress);

    ^

    C:\Users\hp\Desktop\sketch_apr14a\sketch_apr14a.ino: In function 'uint8_t* i2cRead(uint8_t, uint8_t)':

    sketch_apr14a:80: error: 'Wire' was not declared in this scope

    Wire.beginTransmission(IMUAddress);

    ^

    sketch_apr14a:80: error: 'IMUAddress' was not declared in this scope

    Wire.beginTransmission(IMUAddress);

    ^

    C:\Users\hp\Desktop\sketch_apr14a\sketch_apr14a.ino:79:11: warning: address of local variable 'data' returned [-Wreturn-local-addr]

    uint8_t data[nbytes];

    ^

    exit status 1

    'Wire' was not declared in this scope

    0
    user
    冰顾

    Question 4 months ago

    how to chosing MOSEFET?

    0
    user
    冰顾

    Question 4 months ago

    如何选择 MOSFET?

    I could not find 100W LED on my local electronics shop. I have gathered all the parts, and the local shops only have 50W LED, and some of the shops i visited, said 100W is so powerful i have to cool it and the metal plate that used in this project, will not be enough for the cooling, even with 12V. So my question is, for my curiosity, were they right about the cooling(Any useful info will be more than appreciated c:)? And can i use 50W LED instead?

    1 reply

    If it helps I am also building a version of this stroboscope but mine will be a slightly different (I will post pictures soon). For cooling you are absolutely right that LED will get very hot so what I decided to to was get myself and old CPU cooler and mount the LED onto it. That way the LED will never get too hot. Just an idea

    hello I am very facinated by this project but I was just wondering if ther would be a way to this withought the accelorometer.

    Very very good project. totally will make it.

    The link for the battery is dead can you provide another one? can I use normal batteries for it?

    This is awesome.... so awesome I followed the guide and made my own :) (pics to follow later) BUT, I'm having an issue.... I can't turn it on / off like you do in the video. I can't shake it in any direction to turn on/off?

    Also, my light "flashes" what I mean is, other than the strobe effect it turns on and off, so let's say it strobes for 500ms then turns off for 500ms, it's not constant strobing like your video.

    I've triple checked my wiring so I'm stuck. For what it's worth, during testing I'm powering from a 12v 2a mains supply, so no battery to go flat

    2 replies

    hi, I'm trying to replace the project but it not works, can you help me with some pictures please?

    Another quick update... For some strange reason, it didn't like the i2cread and i2cwrite method used in the sketch... I adjusted mine and now it works perfectly :)

    Thanks again for an awesome project :)

    For anyone curious, here is the "modded" code I used to get it working for me:

    int light = 500; // LIGHTS ON delay, microseconds

    int dark; // LIGHTS OFF delay

    int min_dark = 1; // min dark delay

    int max_dark = 50; // max dark delay

    #define light_pin 3 // MOSFET pin // Was pin 2 - JT

    #define potent_pin 6 // potentiometer pin

    int angle;

    boolean flag;

    long lastchange;

    #include <Wire.h>

    #include "Kalman.h"

    Kalman kalmanX;

    Kalman kalmanZ;

    const int MPU_addr = 0x68; // I2C address of the MPU-6050

    /* IMU Data */

    int16_t accX;

    int16_t accY;

    int16_t accZ;

    int16_t tempRaw;

    int16_t gyroX;

    int16_t gyroY;

    int16_t gyroZ;

    double accXangle; // Angle calculate using the accelerometer

    double accZangle;

    double temp;

    double gyroXangle = 180; // Angle calculate using the gyro

    double gyroZangle = 180;

    double compAngleX = 180; // Calculate the angle using a Kalman filter

    double compAngleZ = 180;

    double kalAngleX; // Calculate the angle using a Kalman filter

    double kalAngleZ;

    uint32_t timer;

    void setup() {

    Wire.begin();

    pinMode(light_pin, OUTPUT);

    Wire.beginTransmission(MPU_addr);

    Wire.write(0x6B); // PWR_MGMT_1 register

    Wire.write(0); // set to zero (wakes up the MPU-6050)

    Wire.endTransmission(true);

    kalmanX.setAngle(180); // Set starting angle

    kalmanZ.setAngle(180);

    timer = micros();

    }

    void loop() {

    measure(); // obtain acceleration and angle speeds

    if (accZ > 25000 && (millis() - lastchange > 300)) { // Z axis shake detection

    flag = !flag; // toggle light

    lastchange = millis(); // timer

    }

    //flag=1;

    if (flag == 1) {

    angle = 250 - kalAngleZ; // calculate angle (with 250 degrees offset)

    // dark times calculation

    dark = map(analogRead(potent_pin), 0, 1024, min_dark, max_dark);

    digitalWrite(light_pin, 1); // lights up

    delayMicroseconds(light); // wait

    digitalWrite(light_pin, 0); // lights down

    delay(dark); // wait

    delayMicroseconds(2000 + angle * 10); // extra wait

    }

    }

    // oh my god, it's some tricky sh*t

    void measure() {

    Wire.beginTransmission(MPU_addr);

    Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)

    Wire.endTransmission(false);

    Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers

    accX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)

    accY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)

    accZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)

    tempRaw=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)

    gyroX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)

    gyroY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)

    gyroZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

    /* Calculate the angls based on the different sensors and algorithm */

    accZangle = (atan2(accX, accY) + PI) * RAD_TO_DEG;

    accXangle = (atan2(accY, accX) + PI) * RAD_TO_DEG;

    double gyroXrate = (double)gyroX / 131.0;

    double gyroZrate = -((double)gyroZ / 131.0);

    gyroXangle += kalmanX.getRate() * ((double)(micros() - timer) / 1000000); // Calculate gyro angle using the unbiased rate

    gyroZangle += kalmanZ.getRate() * ((double)(micros() - timer) / 1000000);

    kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros() - timer) / 1000000); // Calculate the angle using a Kalman filter

    kalAngleZ = kalmanZ.getAngle(accZangle, gyroZrate, (double)(micros() - timer) / 1000000);

    timer = micros();

    }

    I could not find 100W LED on my local electronics shop. I have gathered all the parts, and the local shops only have 50W LED, and some of the shops i visited, said 100W is so powerful i have to cool it and the metal plate that used in this project, will not be enough for the cooling, even with 12V. So my question is, for my curiosity, were they right about the cooling(Any useful info will be more than appreciated c:)? And can i use 50W LED instead?

    do you think a IRFZ44n would work alright?

    Bonjour
    pour la batterie 3 accue de 3.7 v ses bien pour alimenter
    Merci

    Hi,

    What led did you use?

    I clicked on the link and saw that there were lots of different leds.

    Quick Question: What is the precision of your Arduino nano's oscillator. I've tried doing this project a long time ago and failed because my fan was either moving too slowly clockwise or too slowly counter-clockwise. I could never make it still!

    Did you get past this issue?

    Also, great job man, I'm totally gonna make this. FYI: This project could've have been entered into a contest here on Instructables. You probably could've won first or second place! TTFN

    1 reply

    Thanx =) Precision is good, look in the code. I use delay and delayMicroseconds to get a maximum "frequency step".