ITTT Rainbow Glove

by Aniek Janssen in Circuits > Arduino

103 Views, 0 Favorites, 0 Comments

ITTT Rainbow Glove

IMG_20210530_205208.jpg

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

Capture.PNG
Capture.PNG

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

IMG_20210414_133228.jpg
IMG_20210414_161541.jpg
IMG_20210523_200613.jpg
IMG_20210522_132305.jpg
IMG_20210523_201050.jpg
IMG_20210518_234114.jpg
IMG_20210528_015452.jpg
aaa.jpg

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

IMG_20210530_215802.jpg

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

unknown.png
#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

IMG_20210528_125931.jpg

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.