AmandaTVMiller
Published

Storm in a Box

Unlimited cosmic storming! Itty bitty living space.

IntermediateShowcase (no instructions)3,757
Storm in a Box

Things used in this project

Hardware components

Raspberry Pi 3 Model B+
Raspberry Pi 3 Model B+
×1
Arduino UNO
Arduino UNO
×2
SG90 Micro-servo motor
SG90 Micro-servo motor
×1
Axial Fan, 12 VDC
Axial Fan, 12 VDC
×1
Adafruit NeoPixel Digital RGB LED Strip 144 LED, 1m White
Adafruit NeoPixel Digital RGB LED Strip 144 LED, 1m White
×1
Acrylic
Pulled from old picture frames found around the neighborhood. Upcycling!
×1
Pillow
For the clouds.
×1
Water Pump
×1
Weather Rack
Anemometer, Wind vane and a rain gauge. Note that these were used primarily for the simulation factor. We did not use them to measure the artificial rain fall but it could be done
×1
Anemometer
×1
rain gauge
×1
Wind Vane
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

Machine Back

Code

Lightning Code

Arduino
For the neopixel lightning
// Lighting Cloud
// James Bruce

#include "FastLED.h"

#define NUM_LEDS 70
#define DATA_PIN 3

enum Mode {CLOUD, ACID, OFF, ON, RED, GREEN, BLUE, FADE};
Mode mode = CLOUD;
Mode lastMode = CLOUD;

int fade_h;
int fade_direction = 1;

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds(leds, NUM_LEDS);
  Serial.begin(9600);
}

void loop() {

constant_lightning();

}

void single_colour(int H) {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV( H, 255, 255);
  }
  if (lastMode != mode) {
    FastLED.show();
    lastMode = mode;
  }
  delay(50);
}

void colour_fade() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV( fade_h, 255, 255);
  }
  if (fade_h > 254) {
    fade_direction = -1;
  }
  else if (fade_h < 0) {
    fade_direction = 1;
  }
  fade_h += fade_direction;
  FastLED.show();
  delay(100);
}

void reset() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV( 0, 0, 0);
  }
  FastLED.show();
}

void acid_cloud() {
  for (int i = 0; i < NUM_LEDS; i++) {
    if (random(0, 100) > 90) {
      leds[i] = CHSV( random(0, 255), 255, 255);
    }
    else {
      leds[i] = CHSV(0, 0, 0);
    }
  }
  FastLED.show();
  delay(random(5, 100));
  reset();
  //}
}

void rolling() {
  for (int r = 0; r < random(2, 10); r++) {
    for (int i = 0; i < NUM_LEDS; i++) {
      if (random(0, 100) > 90) {
        leds[i] = CHSV( 0, 0, 255);
      }
      else {
        leds[i] = CHSV(0, 0, 0);
      }
    }
    FastLED.show();
    delay(random(5, 100));
    reset();
  }
}

void crack() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV( 0, 0, 255);
  }
  FastLED.show();
  delay(random(10, 100));
  reset();
}

void thunderburst() {
  int rs1 = random(0, NUM_LEDS / 2);
  int rl1 = random(10, 20);
  int rs2 = random(rs1 + rl1, NUM_LEDS);
  int rl2 = random(10, 20);
  for (int r = 0; r < random(3, 6); r++) {
    for (int i = 0; i < rl1; i++) {
      leds[i + rs1] = CHSV( 0, 0, 255);
    }
    if (rs2 + rl2 < NUM_LEDS) {
      for (int i = 0; i < rl2; i++) {
        leds[i + rs2] = CHSV( 0, 0, 255);
      }
    }
    FastLED.show();
    delay(random(10, 50));
    reset();
    delay(random(10, 50));
  }
}

void constant_lightning() {
  switch (random(1, 10)) {
    case 1:
      thunderburst();
      delay(random(10, 500));
      Serial.println("Thunderburst");
      break;
    case 2:
      rolling();
      Serial.println("Rolling");
      break;
    case 3:
      crack();
      delay(random(50, 250));
      Serial.println("Crack");
      break;
  }
}

Wave Tank - With Potentiometer

Arduino
Dial Controlled Sequence
// Arduino Wave Tank
// Vije Miller

#include <Servo.h>

Servo left;
Servo right;

int pos = 20;
int post = 160;
int back = 20;
int forward = 160;

int red = 6;
int green = 5;
int blue = 4;

int slow = 8;
int fast = 4;

void setup() {

  Serial.begin(9600);

  left.attach(2);
  right.attach(3);

  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);

  left.write(back);
  right.write(back);

  digitalWrite(green, HIGH);
  delay(1000);
  digitalWrite(green, LOW);
  delay(1000);
  digitalWrite(red, HIGH);
  delay(1000);
  digitalWrite(red, LOW);
  delay(1000);

}

void loop() {

  int pent = analogRead(A0);
  Serial.println(pent);

  if (pent < 200) {
    digitalWrite(blue, HIGH);
    digitalWrite(red, LOW);
    digitalWrite(green, LOW);
    for (pos = back; pos <= forward; pos += 1) {
      left.write(pos);
      right.write(pos);
      delay(slow);
    }
    for (pos = forward; pos >= back; pos -= 1) {
      left.write(pos);
      right.write(pos);
      delay(slow);
    }
  }
  else if (pent > 200 && pent < 450) {
    digitalWrite(blue, LOW);
    digitalWrite(red, HIGH);
    digitalWrite(green, LOW);
    for (pos = back; pos <= forward; pos += 1) {
      left.write(pos);
      right.write(pos);
      delay(fast);
    }
    for (pos = forward; pos >= back; pos -= 1) {
      left.write(pos);
      right.write(pos);
      delay(fast);
    }
  }
  else if (pent > 450 && pent < 700) {
    digitalWrite(blue, LOW);
    digitalWrite(red, LOW);
    digitalWrite(green, HIGH);
    for (pos = back; pos <= forward; pos += 1) {
      post = map(pos, 20, 160, 160, 20);
      left.write(pos);
      right.write(post);
      delay(slow);
    }
    for (pos = forward; pos >= back; pos -= 1) {
      post = map(pos, 160, 20, 20, 160);
      left.write(pos);
      right.write(post);
      delay(slow);
    }
  }
  else if (pent > 700 && pent < 1023) {
    digitalWrite(blue, LOW);
    digitalWrite(red, HIGH);
    digitalWrite(green, LOW);
    for (pos = back; pos <= forward; pos += 1) {
      post = map(pos, 20, 160, 160, 20);
      left.write(pos);
      right.write(post);
      delay(fast);
    }
    for (pos = forward; pos >= back; pos -= 1) {
      post = map(pos, 160, 20, 20, 160);
      left.write(pos);
      right.write(post);
      delay(fast);
    }
  }
}

Credits

Amanda
2 projects • 1 follower
Contact
TVMiller
1 project • 0 followers
Contact

Comments

Please log in or sign up to comment.