Inhaltsverzeichnis:
- Schritt 1: Materialien sammeln
- Schritt 2: Schaltungen herstellen
- Schritt 3: Entwerfen des Handschuhs
- Schritt 4: Löten
- Schritt 5: Codierung
- Schritt 6: Änderungen
Video: Rhythmushand - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Bei diesem Cyberhandschuh geht es darum, im richtigen Moment den richtigen Zug zu machen.
Die Lichter gehen von Ihrem Arm (Ellbogen) zu Ihrer Hand und wenn die Lichter an Ihrer Hand ankommen, müssen Sie Ihre Finger auf die Mini-Lichtschranke drücken.
Wenn Sie im richtigen Moment mit der Hand auf die Mini-Lichtschranke drücken, werden die LEDs grün. Wenn nicht, werden die LEDs rot.
Schritt 1: Materialien sammeln
- Ein Handschuh
- Stoff, um den Handschuh länger zu machen
- WS2812B LED-Streifen
- Drähte
- Arduino
- Mini-Fotoverkauf
Schritt 2: Schaltungen herstellen
Verbinden Sie zuerst den LED-Streifen mit dem Arduino. Sie können dies tun, indem Sie die +5V mit den 5V auf dem Arduino verbinden. Der Din muss mit A0 auf dem Arduino verbunden werden und der GND muss mit dem GND auf dem Arduino verbunden werden.
Sie müssen auch die Mini-Fotozelle an das Arduino anschließen, indem Sie das 5-V-Kabel vom LED-Streifen und von derselben Quelle mit einem Draht an PIN 6 am Arduino anschließen. Die andere Seite der Mini-Fotozelle muss mit dem GND-Kabel des LED-Streifens verbunden werden
Schritt 3: Entwerfen des Handschuhs
Der Handschuh muss die richtige Größe haben, um zu den LED-Streifen zu passen. Die LEDs müssen ausgerichtet werden, um das Betrachten angenehmer zu machen.
Für dieses Spiel musst du deinen Arm benutzen und du möchtest dich frei bewegen können. Dies kann durch das Anziehen des Arduino auf den Handschuh realisiert werden. Ich habe Klettverschluss als Verschluss verwendet, um das Arduino an den Handschuh zu kleben. Dann können Sie für mehr Stabilität ein Seil um den Handschuh und um das Arduino legen.
Die Mini-Lichtschranke wurde in den Handschuh eingenäht, damit sie an Ort und Stelle bleibt.
Schließlich müssen Sie die Drähte verstecken, damit es besser aussieht. Dies kann mit Stoff erfolgen, der auf die Drähte genäht wird.
Schritt 4: Löten
Jetzt können Sie die Anschlussdrähte vom Stromkreis durch Löten sichern.
Schritt 5: Codierung
// Ein grundlegendes NeoPixel-Streifentestprogramm für den Alltag.
// BEST PRACTICES VON NEOPIXEL für den zuverlässigsten Betrieb: // - Fügen Sie 1000 uF KONDENSATOR zwischen den + und - Anschlüssen des NeoPixel-Streifens hinzu. // - MINIMIEREN VERKABELUNGSLÄNGE zwischen Mikrocontroller-Platine und erstem Pixel. // - Der DATA-IN des NeoPixel-Streifens sollte einen 300-500 OHM-WIDERSTAND durchlaufen. // - VERMEIDEN Sie, NeoPixel mit einem LIVE-CIRCUIT zu verbinden. Wenn Sie müssen, IMMER // zuerst GROUND (-) verbinden, dann +, dann Daten. // - Bei Verwendung eines 3.3V-Mikrocontrollers mit einem 5V-gespeisten NeoPixel-Streifen // wird ein LOGIC-LEVEL-KONVERTER auf der Datenleitung DRINGEND EMPFOHLEN. // (Diese zu überspringen funktioniert möglicherweise auf Ihrer Workbench, kann aber im Feld fehlschlagen)
#include #ifdef _AVR_ #include // Erforderlich für 16 MHz Adafruit Trinket #endif
// Welcher Pin des Arduino ist mit den NeoPixels verbunden? // Bei einem Schmuckstück oder einer Gemma empfehlen wir, dies in 1 zu ändern: #define LED_PIN 6
// Wie viele NeoPixel sind an den Arduino angeschlossen? #define LED_COUNT 60
// Deklarieren Sie unser NeoPixel-Streifen-Objekt: Adafruit_NeoPixel-Streifen (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color(127, 127, 127); // Weiße Farbe, für Standard bool clickedCorrectly = false; // Argument 1 = Anzahl der Pixel im NeoPixel-Streifen // Argument 2 = Arduino-Pinnummer (die meisten sind gültig) // Argument 3 = Pixeltyp-Flags, nach Bedarf addieren: // NEO_KHZ800 800 KHz Bitstream (die meisten NeoPixel-Produkte mit WS2812 LEDs) // NEO_KHZ400 400 KHz (klassisch 'v1' (nicht v2) FLORA Pixel, WS2811 Treiber) // NEO_GRB Pixel sind für GRB Bitstream verdrahtet (die meisten NeoPixel Produkte) // NEO_RGB Pixel sind verdrahtet für RGB Bitstream (v1 FLORA Pixel, nicht v2) // NEO_RGBW Pixel sind für RGBW Bitstream verdrahtet (NeoPixel RGBW Produkte)
// setup()-Funktion -- wird einmal beim Start ausgeführt --------------------------------
void setup() {// Diese Zeilen sind speziell zur Unterstützung des Adafruit Trinket 5V 16 MHz. // Jedes andere Board, Sie können diesen Teil entfernen (aber es schadet nicht, ihn zu verlassen): #if define(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // ENDE des Trinket-spezifischen Codes.
PinMode (A0, EINGANG); strip.begin(); // NeoPixel-Strip-Objekt initialisieren (erforderlich) strip.show(); // Alle Pixel so schnell wie möglich ausschalten strip.setBrightness (10); // Setze HELLIGKEIT auf etwa 1/5 (max = 255) }
// loop() Funktion -- läuft wiederholt solange das Board eingeschaltet ist --------------
Void loop () {clickedCorrectly = theaterChaseOne (Farbe); wenn (richtig angeklickt) {Farbe = Streifen. Farbe (0, 255, 0); aufrechtzuerhalten. Sonst {Farbe = Streifen. Farbe (255, 0, 0); } }
// Einige eigene Funktionen zum Erstellen animierter Effekte -----------------
// Lauflichter im Stil eines Theaterzeltes. Übergeben Sie eine Farbe (32-Bit-Wert, // a la strip. Color(r, g, b) wie oben erwähnt) und eine Verzögerungszeit (in ms) // zwischen den Frames. bool theaterChaseOne (uint32_t color) { bool richtig = falsch; bool clickedWrong = false; für (int Index = 0; Index 800) {//Wert Lichtsensor wenn (Index < 16) {//2 LEDs vor Ende dann können Sie auf Farbe = Streifen klicken. Farbe (255, 0, 0); // rote LED-Farben clickedWrong = true; // falsch geklickt, dann werden die LEDs rot} else if (!clickedWrong) {//wenn nicht falsche Farbe = strip. Color (0, 255, 0); // grüne LED-Farben richtig = wahr; // richtig angeklickt, dann werden die LEDs grün}} strip.clear (); strip.setPixelColor(17 - Index, Farbe); // erste Reihe LED-Leuchten strip.setPixelColor (18 + Index, Farbe); // zweite Reihe LED-Leuchten strip.setPixelColor (53 - Index, Farbe); // dritte Reihe LED-Leuchten strip.show (); Verzögerung (300); } Rückgabe korrekt; }
Schritt 6: Änderungen
Ich habe einige Änderungen vorgenommen. Erstens habe ich das Arduino versteckt, damit es bequemer ist, die "Rythm-Hand" zu verwenden, und zweitens habe ich den Code ein wenig geändert. Ich habe den Code so geändert, dass beim Drücken im richtigen Moment die Farbe grün wird und sich die LEDs schneller bewegen. Dadurch wird die LED Swill um 10 % schneller als zuvor. Das macht das Spiel interessanter
So sieht der Code jetzt aus:
// Ein grundlegendes NeoPixel-Streifentestprogramm für den Alltag. // BEST PRACTICES VON NEOPIXEL für den zuverlässigsten Betrieb: // - Fügen Sie 1000 uF KONDENSATOR zwischen den + und - Anschlüssen des NeoPixel-Streifens hinzu. // - MINIMIEREN VERKABELUNGSLÄNGE zwischen Mikrocontroller-Platine und erstem Pixel. // - Der DATA-IN des NeoPixel-Streifens sollte einen 300-500 OHM-WIDERSTAND durchlaufen. // - VERMEIDEN Sie, NeoPixel mit einem LIVE-CIRCUIT zu verbinden. Wenn Sie müssen, IMMER // zuerst GROUND (-) verbinden, dann +, dann Daten. // - Bei Verwendung eines 3.3V-Mikrocontrollers mit einem 5V-gespeisten NeoPixel-Streifen // wird ein LOGIC-LEVEL-KONVERTER auf der Datenleitung DRINGEND EMPFOHLEN. // (Das Überspringen dieser kann auf Ihrer Werkbank funktionieren, kann aber im Feld fehlschlagen) #include #ifdef _AVR_ #include // Erforderlich für 16 MHz Adafruit Trinket #endif // Welcher Pin des Arduino ist mit den NeoPixels verbunden? // Bei einem Trinket oder Gemma empfehlen wir, dies in 1 zu ändern: #define LED_PIN 6 // Wie viele NeoPixel sind am Arduino angeschlossen? #define LED_COUNT 60 // Deklarieren Sie unser NeoPixel-Streifen-Objekt: Adafruit_NeoPixel-Streifen (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); uint32_t color = strip. Color(127, 127, 127); // Weiße Farbe, für Standard bool clickedCorrectly = false; int-Index = 0; int-Intervall = 300; int-Ergebnis = 0; unsigned long previousMs = millis(); // Argument 1 = Anzahl der Pixel im NeoPixel-Streifen // Argument 2 = Arduino-Pinnummer (die meisten sind gültig) // Argument 3 = Pixeltyp-Flags, nach Bedarf addieren: // NEO_KHZ800 800 KHz Bitstream (die meisten NeoPixel-Produkte mit WS2812 LEDs) // NEO_KHZ400 400 KHz (klassisch 'v1' (nicht v2) FLORA Pixel, WS2811 Treiber) // NEO_GRB Pixel sind für GRB Bitstream verdrahtet (die meisten NeoPixel Produkte) // NEO_RGB Pixel sind verdrahtet für RGB Bitstream (v1 FLORA Pixel, nicht v2) // NEO_RGBW Pixel sind für RGBW Bitstream verdrahtet (NeoPixel RGBW Produkte) // setup() Funktion -- läuft einmal beim Start -------------------- ------------ void setup() {// Diese Zeilen sind speziell zur Unterstützung des Adafruit Trinket 5V 16 MHz. // Jedes andere Board, Sie können diesen Teil entfernen (aber es schadet nicht, ihn zu verlassen): #if define(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // ENDE des Trinket-spezifischen Codes. Serial.begin (9600); while (!Seriell) {; // Warten Sie, bis der serielle Port eine Verbindung herstellt. Nur für nativen USB-Port erforderlich } pinMode(A0, INPUT); strip.begin(); // NeoPixel-Strip-Objekt initialisieren (erforderlich) strip.show(); // Alle Pixel so schnell wie möglich ausschalten strip.setBrightness (10); // Setze BRIGHTNESS auf ungefähr 1/5 (max = 255) } // loop() Funktion -- läuft wiederholt solange das Board eingeschaltet ist -------------- void loop() { unsigned long currentMs = millis(); // Abrufen der aktuellen Zeit int value = analogRead (A0); // Auslesen des aktuellen Lichtsensors if (Wert > 900 && Ergebnis == 0) { // Wenn der Sensor gedrückt wird und noch kein Ergebnis aufgezeichnet wurde, Ergebniserfassung auslösen if (Index = Intervall) { // Prüfen, ob der Strom Schleife überschreitet das Intervall previousMs = currentMs; // Setze das neue Intervall auf die aktuelle Zeit + Intervallindex += 1; // Setze die LEDs in der Schleife einen Schritt weiter if (index > 17) { // Trigger-Ende der Schleifenbehandlung index = 0; if (result == 2) { // Bei einem korrekten Ergebnisintervall = (int)max ((interval * 0,95), 50); // Beschleunigen Sie um 10%, bis zu einem Intervall von 50 ms / Farbe = strip. Color (0, 255, 0); // Setze die LEDs auf grün} else if (result == 1) { // Bei einem falschen Ergebnisintervall = 300; // Setzen Sie die Intervallfarbe zurück = strip. Color (255, 0, 0); // Setzen Sie die LEDs auf Rot} else {// Bei keinem erfassten Ergebnis color = strip. Color (255, 0, 0); // Setze die LEDs auf rot} result = 0; // Das Ergebnis für die nächste Schleife zurücksetzen } theaterChaseOne(color, index); // Beleuchten Sie die LEDs zur Anzeige. } } // Einige eigene Funktionen zum Erstellen animierter Effekte ----------------- // Lauflichter im Theater-Festzelt-Stil. Übergeben Sie eine Farbe (32-Bit-Wert, // a la strip. Color(r, g, b) wie oben erwähnt) und eine Verzögerungszeit (in ms) // zwischen den Frames. void theaterChaseOne (uint32_t color, int index) { strip.clear(); strip.setPixelColor(17 - Index, Farbe); // erste Reihe LED-Leuchten strip.setPixelColor (18 + Index, Farbe); // zweite Reihe LED-Leuchten strip.setPixelColor (53 - Index, Farbe); // dritte Reihe LED-Leuchten strip.show (); }