Revenge of the Trash (lamp)
Een lamp volledig gemaakt van afval voor mijn opleiding: HKU Games, module: ITTT
Deze lamp heeft 3 knoppen.
Knop 1 schakkelt de lamp aan en uit en draait de lamp (90 graden) in zijn start positie
Knop 2 draait de lamp 10 graden naar link
En knop 3 draait de lamp 10 graden naar rechts
De reden dat ik dit ontwerp heb gemaakt is om aandacht te vragen voor ons milleu, sustainability, en de nadelen van onze consumptie maatschapij.
Downloads
Supplies
Benodigdheden:
-1x arduino uno
-1x adapter voor arduino
-1x 180 graden servo motor
-3x 10K resistors
-1x USB lampje (5 volt)
-3x druk knopjes
-1x een lege fles frisdrank
-1x leeg half liter blik
-1x oud podlood
-1x rol wc papier
-een hoop lege baterijen
-tape
-kroonsteentjes
Gereedschap:
-vork
-schaar
-scherp mes
-lijm pistol
-schroevendraaier
-aansteker
Knip De Usb Aansluiting Van Het Usb Lampje Af En Expose De Draden.
Knip De Usb Aansluiting Van Het Usb Lampje Af En Expose De Draden.
Maak Een Opening in De Fles
Maak Een Opening in De Dop
Maak De Openingen in Het Halve Liter Blik Bier
Bevestig De Vleugel Van De Servo Motor Aan Het Podlood Met De Bijgeleverde Schroeven
Bevestig Het Podlood Aan Het Halve Liter Blik Met Tape
Verhit Een Vork Met Een Aansteker En Prik Gaatjes in De Fles Voor De Druk Knoppen
Bevestig De Knoppen En Maak Deze Vast Met Een Lijm Pistol
Stop Het Usb Lampje in Het Blik
Vul De Bodem Van De Fles Met Lege Baterijen Om De Onderkant Van De Fles Te Verzwaren, Bedek Deze Vervolgens Met Wc Papier.
Stop De Servo Motor in De Dop En Bevestig De Vleugel (met Daar Aan Het Podlood En Blikje + Usb Lampje), Zorg Dat De Draden Langs De Servo Motor De Fles in Gaan.
Upload De Volgende Code Naar Je Arduino Uno:
//all liaberies
#include <Servo.h>
//Constant vars
//all pins
int on_switch_pin = 2;
int turn_left_pin = 3;
int turn_right_pin = 4;
int light_pin = 7;
int servo_pin = 8;
//miscellaneous
int button_delay = 500;
Servo servo_motor;
//dynamic vars
//button states
int on_switch_buttonState = 0;
int turn_left_buttonState = 0;
int turn_right_buttonState = 0;
//miscellaneous
int is_on = 0;
int current_rot_servo = 0;
void setup()
{
set_pinmodi(); //set all pin modi
servo_motor.write(0); //to calibrate servo
}
void loop()
{
//check all buttons
check_on_button_state();
check_left_turn_button();
check_right_turn_button();
}
//set all pin modi
void set_pinmodi()
{
pinMode(light_pin, OUTPUT);
pinMode(on_switch_pin, INPUT);
pinMode(turn_left_pin, INPUT);
pinMode(turn_right_pin, INPUT);
pinMode(servo_pin, OUTPUT);
servo_motor.attach(servo_pin);
}
void check_on_button_state()
{
on_switch_buttonState = digitalRead(on_switch_pin); //update if button is pressed
if (is_on == 0 && on_switch_buttonState == HIGH) //check if button is pressed (on_switch_buttonState) & if device is already powerd on (is_on, 0 = off and 1 = on)
{
digitalWrite(light_pin, HIGH); //switch light on
servo_motor.write(90); //turn servo motor
current_rot_servo = 90; //keep track of current rotation
delay(button_delay); //to give user time to release button
is_on = 1; //keep track of device is turned on
}
on_switch_buttonState = digitalRead(on_switch_pin); //update if button is pressed
if (is_on == 1 && on_switch_buttonState == HIGH) //check if button is pressed (on_switch_buttonState) & if device is already powerd on (is_on, 0 = off and 1 = on)
{
digitalWrite(light_pin, LOW); //switch light off
servo_motor.write(0); //turn servo motor
current_rot_servo = 0; //keep track of current rotation
delay(button_delay); //to give user time to release button
is_on = 0; //keep track of device is turned on
}
}
void check_left_turn_button()
{
turn_left_buttonState = digitalRead(turn_left_pin); //update if button is pressed
if (turn_left_buttonState == HIGH) //check if button is pressed
{
current_rot_servo -= 10; //calculate new rotation
if (current_rot_servo <= 0) //check if it doesn't cross boundery
{
current_rot_servo = 0; //boundery crossed, go to minimum value
servo_motor.write(0); //turn servo to minimum value
delay(button_delay); //to give user time to release button
}
else
{
servo_motor.write(current_rot_servo); //turn servo to new rotation
delay(button_delay); //to give user time to release button
}
}
}
void check_right_turn_button()
{
turn_right_buttonState = digitalRead(turn_right_pin); //update if button is pressed
if (turn_right_buttonState == HIGH) //check if button is pressed
{
current_rot_servo += 10; //calculate new rotation
if (current_rot_servo >= 180) //check if it doesn't cross boundery
{
current_rot_servo = 180; //boundery crossed, go to minimum value
servo_motor.write(180); //turn servo to maximum value
delay(button_delay); //to give user time to release button
}
else
{
servo_motor.write(current_rot_servo); //turn servo to new rotation
delay(button_delay); //to give user time to release button
}
}
}
//all test functions
void test_servo()
{
servo_motor.write(90);
delay(1000);
servo_motor.write(0);
delay(1000);
}
void test_check_on_button_state()
{
on_switch_buttonState = digitalRead(on_switch_pin);
if (on_switch_buttonState == HIGH)
{
digitalWrite(light_pin, HIGH);
Serial.println('Y');
} else {
digitalWrite(light_pin, LOW);
Serial.println('N');
}
}
void test_light()
{
digitalWrite(light_pin, HIGH);
delay(1000);
digitalWrite(light_pin, LOW);
delay(1000);
}
Downloads
Sluit Alle Bedrading En Resistors Aan, Aan De Hand Van Het Volgende Schema:
Sluit De Opening Van De Fles En Tape Deze Dicht
Reflectie
Ik heb geleerd hoe fragile zo’n frisdrank fles eigenlijk is.
Zodra je er een stuk uitsnijd of er komt wat hitte in de de buurt, zakt deze fles gelijk in.
Ook was het een leuke uitdaging om een keer iets proberen te maken van volledig afval. (zelfs alle arduino componenten zijn af gesloopt van andere arduino projecten)
Het was wel jammer dat het uiteindelijk niet gelukt is om het halve liter blik aan de servo vleugel te bevestigen met lege lange vloei boekjes.
Ik heb dit wel geprobeerd maar het was niet stevig genoeg en heb daardoor moeten ittereren naar een potlood om dit mee te bevestigen:
Daarnaast heb ik de arduino skills die ik al had weer effe kunnen doornemen, iets wat natuurijk nooit kwaad kan.