Introduction: Snow on Demand

Welkom bij onze instructable voor de seminar Happy Hacking!

De installatie die we hebben gemaakt is sterk geïnspireerd door de "hevige" sneeuwval aan het begin van de seminar. Sneeuw is mooi, maar we vonden het jammer dat er geen sneeuw in de zomer valt. Daarom hebben we een zomers thema gecombineerd met sneeuw!

Het uiteindelijke product is een soort tropisch diorama met dwarrelende sneeuwvlokken er in.

Step 1: Ontwerp

Het ontwerp van de installatie is vrij simpel. Het is een langwerpige kubus met een plexiglas voorkant en een soort rechthoekige trechter onderin. Onder de trechter zit een ventilator die de sneeuw (piepschuim) omhoog moet blazen. Bovenin zit een servo waar een uitgezaagde palmboom aanhangt zodat die kan ronddraaien. Alle elektronica zit onder de trechter zodat het gescheiden is van de sneeuwcabine. Ook zit er een ledstrip in de hoeken van het plafond om alles te belichten. Als laatste zitten er aan de voorkant twee gaten voor de diepte sensor.

Step 2: Elektronica

Voor de elektronica hebben we de volgende componenten gebruikt:

  • Ultrasonische dieptesensor
  • Servo
  • Ledstrip
  • 3 pin ventilator
  • Arduino
  • Een aantal 9v batterijen verbonden in serie

De ventilator staat niet afgebeeld in het diagram, want die zit niet verbonden aan de arduino.

De servo wordt aangestuurd via pin 7, de ledstrip via pin 8, en de sonische sensor via pin 9 en 10.

Step 3: Code

De code laat de installatie aangaan (op de ventilator na). Als de dieptesensor een afstand van minder dan 50 cm detecteert zet de arduino de ledstrip aan, en laat vervolgens de servo draaien. De servo draait eerst 180 graden de ene kant op, dan 180 graden de andere kant op, en blijft dit herhalen.

#include

Servo myservo;

int servoPin = 7; int ledPin = 8; int trigPin = 9; int echoPin = 10;

//servo pos int pos = 0; bool rotate1 = true;

//echo vars long duration; int distance;

void setup() { myservo.attach(servoPin); pinMode(ledPin, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); }

void loop() { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance);

//if distance is less than 1 meter if(distance <= 50){ //turn on ledstrip digitalWrite(ledPin, HIGH); if(rotate1) { pos++; if(pos == 180) { rotate1 = false; } } else { pos--; if(pos == 0) { rotate1 = true; } } myservo.write(pos); delay(15); } else { digitalWrite(ledPin, LOW); } }