ITTT Rainbow Glove
Een controller op je hand kan best wel leuk zijn, of het nou is om het spel erin te spelen of om extra flare te geven aan een middelvinger opsteken, een lichtgevende handschoen kan op veel manieren plezier beleven. Door te bewegen met je vingers zullen de LEDs aangaan en de ring op de kleurencombinaties schijnen voor een leuk effect.
Supplies
5 licht sensoren
5 LEDS
2 LED ringen
7 diodes
9V batterij aansluiting
Kabels
Karton
Het Idee
Het idee neemt inspiratie van de Nintendo Power Glove. Het idee is dat een LED activeert zodra je een vinger opsteekt, en dat de buitenste ring op de achterkant van je hand oplicht met de kleurencombinatie die je ophoud. de middelste ring zou een kleur aangeven om ermee te matchen. Zo heb je en een leuke handschoen en een klein spel in een.
Iteraties
Eerst is het hele circuit met een breadbord gemaakt om alles uit te testen. de meerdere LEDs op een vinger werd vervangen door een enkele LED op elke vinger en de plaatsing van de lichtsensor veranderde ook meerdere keren, samen met de design van de stukken op de vingers die de kabels vasthouden. De code zelf duurde het langste om te maken en debuggen.
Product
Het uiteindelijke project reageert niet perfect, maar doet het goed genoeg om er blij mee te zijn. de middelste ring neemt een random kleur en je kan hem matchen met de buitenste om het spel erin te spelen.
Circuit En Code
#include <FastLED.h> #define DATA_PIN1 6 #define DATA_PIN2 3 #define NUM_LEDS1 12 #define NUM_LEDS2 8 CRGB leds[NUM_LEDS1]; CRGB leds2[NUM_LEDS2]; int Sensitivity = 500; bool ChangeColor = false; int Thumb; int Indexfinger; int Middlefinger; int Ringfinger; int Pinkyfinger; int FingerAmount; int RandomThumb; int RandomIndexfinger; int RandomMiddlefinger; int RandomRingfinger; int RandomPinkyfinger; int RandomFingerAmount; int RandomGreen; int RandomRed; int RandomBlue; int tarGreen; int tarRed; int tarBlue; int Green; int Red; int Blue; int avGreen; int avRed; int avBlue; const int LED1 = 13; const int LED2 = 12; const int LED3 = 11; const int LED4 = 10; const int LED5 = 9; const int Sensor1 = A0; const int Sensor2 = A1; const int Sensor3 = A2; const int Sensor4 = A3; const int Sensor5 = A4; void setup() { Serial.begin(57600); pinMode(LED1, OUTPUT); pinMode(Sensor1, INPUT); pinMode(LED2, OUTPUT); pinMode(Sensor2, INPUT); pinMode(LED3, OUTPUT); pinMode(Sensor3, INPUT); pinMode(LED4, OUTPUT); pinMode(Sensor4, INPUT); pinMode(LED5, OUTPUT); pinMode(Sensor5, INPUT); delay(2000); FastLED.addLeds<WS2812, DATA_PIN1, RGB>(leds, NUM_LEDS1); FastLED.addLeds<WS2812, DATA_PIN2, RGB>(leds2, NUM_LEDS2); } void loop() { LightSensors(); TargetRing(); LightRing(); if (tarGreen == avGreen && tarRed == avRed && tarBlue == avBlue) { avGreen = 0; avRed = 0; avBlue = 0; ChangeColor = true; Serial.println("Time to switch"); } }
void LightRing() { if (Thumb == 1) { Green = Green + 255; } if (Indexfinger == 1) { Green = Green + 127; Red = Red + 127; } if (Middlefinger == 1) { Red = Red + 255; } if (Ringfinger == 1) { Red = Red + 127; Blue = Blue + 127; } if (Pinkyfinger == 1) { Blue = Blue + 255; } int FingerAmount = Thumb + Indexfinger + Middlefinger + Ringfinger + Pinkyfinger; if (FingerAmount >= 1) { avGreen = Green / FingerAmount; avRed = Red / FingerAmount; avBlue = Blue / FingerAmount; } Green = 0; Red = 0; Blue = 0; if (avGreen >= 255) { avGreen = 255; } if (avRed >= 255) { avRed = 255; } if (avBlue >= 255) { avBlue = 255; } for (int Led = 0; Led < NUM_LEDS1; Led = Led + 1) { leds[Led] = CRGB(avGreen, avRed, avBlue); FastLED.show(); delay(25); } }<br>
void LightSensors() { //=============================================================sensor1============================================================= int ldrStatus1 = analogRead(Sensor1); if (ldrStatus1 <= Sensitivity) { //LED off digitalWrite(LED1, LOW); Thumb = 0; } else { //LED on digitalWrite(LED1, HIGH); Thumb = 1; } //=============================================================sensor2============================================================= int ldrStatus2 = analogRead(Sensor2); if (ldrStatus2 <= Sensitivity) { //LED off digitalWrite(LED2, LOW); Indexfinger = 0; } else { //LED on digitalWrite(LED2, HIGH); Indexfinger = 1; } //=============================================================sensor3============================================================= int ldrStatus3 = analogRead(Sensor3); if (ldrStatus3 <= Sensitivity) { //LED off digitalWrite(LED3, LOW); Middlefinger = 0; } else { //LED on digitalWrite(LED3, HIGH); Middlefinger = 1; } //=============================================================sensor4============================================================= int ldrStatus4 = analogRead(Sensor4); if (ldrStatus4 <= Sensitivity) { //LED off digitalWrite(LED4, LOW); Ringfinger = 0; } else { //LED on digitalWrite(LED4, HIGH); Ringfinger = 1; } //=============================================================sensor5============================================================= int ldrStatus5 = analogRead(Sensor5); if (ldrStatus5 <= Sensitivity) { //LED off digitalWrite(LED5, LOW); Pinkyfinger = 0; } else { //LED on digitalWrite(LED5, HIGH); Pinkyfinger = 1; } }<br>
void TargetRing() { if (ChangeColor == true) { //int RandomFingerAmount = rand() % 16; int RandomThumb = rand() % 2; int RandomIndexfinger = rand() % 2; int RandomMiddlefinger = rand() % 2; int RandomRingfinger = rand() % 2; int RandomPinkyfinger = rand() % 2; int RandomFingerAmount = RandomThumb + RandomIndexfinger + RandomMiddlefinger + RandomRingfinger + RandomPinkyfinger; Serial.println(RandomThumb); Serial.println(RandomIndexfinger); Serial.println(RandomMiddlefinger); Serial.println(RandomRingfinger); Serial.println(RandomPinkyfinger); Serial.println(RandomFingerAmount); if (RandomThumb == 1) { RandomGreen = RandomGreen + 255; } if (RandomIndexfinger == 1) { RandomGreen = RandomGreen + 127; RandomRed = RandomRed + 127; } if (RandomMiddlefinger == 1) { RandomRed = RandomRed + 255; } if (RandomRingfinger == 1) { RandomRed = RandomRed + 127; RandomBlue = RandomBlue + 127; } if (RandomPinkyfinger == 1) { RandomBlue = RandomBlue + 255; } if (RandomFingerAmount >= 1) { tarGreen = RandomGreen / RandomFingerAmount; tarRed = RandomRed / RandomFingerAmount; tarBlue = RandomBlue / RandomFingerAmount; } else { tarGreen = 0; tarRed = 0; tarBlue = 0; } RandomGreen = 0; RandomRed = 0; RandomBlue = 0; Serial.println(tarGreen); Serial.println(tarRed); Serial.println(tarBlue); ChangeColor = false; } for (int Led = 0; Led < NUM_LEDS2; Led = Led + 1) { leds2[Led] = CRGB(tarGreen, tarRed, tarBlue); FastLED.show(); delay(25); } }<br>
Reflectie
Ik ben zeer blij met het uiteindelijke resultaat. Er zijn nog zeker dingen te verbeteren zoals flexmeters gebruiken in plaats van lichtsensoren en een kleinere Arduino gebruiken zodat het meer compact past op de hand en de bedrading veiliger maken. Ook is er zeker nog te verbeteren met de code. Maar in het algemeen ben ik zeer trots op mijn eerste keer iets maken met Arduino en ik wil nog verbeteringen maken aan dit project in de zomer.