Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino 101 - Passendes Kleid mit Intel Curie-Muster

Komponenten und Verbrauchsmaterialien

NeoPixel-Streifen
Könnten durch einzelne RGB-LEDs ersetzt werden.
× 1
Arduino 101
× 1
SparkFun Drucktastenschalter 12 mm
× 1
Widerstand 10k Ohm
× 1
Jumper (generisch)
Sie benötigen möglicherweise lange Drähte, um die LEDs von Ihrer Schulter zu Ihrer Hand zu führen.
× 1
9-V-Batterie (generisch)
× 1
9V zu Barrel Jack Connector
× 1
Adafruit Flora RGB Neopixel LEDs - 4er Pack
Dies kann verwendet werden, um den Neopixel-Streifen zu ersetzen.
× 1
Nähbarer leitfähiger Faden
Option zum Ersetzen einiger Kabel.
× 1

Notwendige Werkzeuge und Maschinen

Heißklebepistole (generisch)
Nähmaschine (generisch)
Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Einführung

Ich bin Ingenieur und Künstler und mag Projekte, die Wissenschaft und Kunst verbinden. Ich habe Kleiderdesigns mit eingebetteten Mikrocontrollern erstellt, damit bestimmte Funktionen elektronischer Komponenten verwendet werden können, um das Designthema zu verbessern. Für dieses Projekt möchte ich die Pattern Matching Engine (PME) und den Beschleunigungsmesser in Intel Curie auf Arduino 101 verwenden. Curie wurde für PME-Anwendungen entwickelt, da es über neuronale Netzwerkfähigkeiten verfügt, aber es gab nicht viele PME-Beispiele . Ich hoffe, dieses Beispiel kann Sie dazu inspirieren, die PME-Fähigkeit von Curie zu extrahieren.

Das Kleid verwendet eine Seite meiner Graphic Novel als Stoff. Eine Wissenschaftlerin und ihr Roboter schauen in das Teleskop. Wenn der Träger ein Muster in die Luft zeichnet, leuchtet eine Reihe von LEDs, die in Form von Konstellationen angeordnet sind, am Nachthimmel auf dem Stoff.

Anleitung

*Hinweis:Nachdem dieses Projekt veröffentlicht wurde, habe ich den elektronischen Schaltungsteil renoviert. Eine verbesserte Methode zum Anbringen der LEDs am Tuch und wie man sie haltbar macht, wird jetzt nach Schritt 3 veröffentlicht.

** Update:Das Tragen dieses Kleides für einige ganztägige Demo-Events lieferte eine Schätzung der Akkulaufzeit. Um dieses Kleid mit Strom zu versorgen, muss die 9-V-Batterie etwa alle 3 Stunden gewechselt werden. Die Batterie wird nicht entladen, aber sie fällt unter 9 V, was die Musteranpassung ineffizient macht. Sie können den Akku für andere Zwecke aufbewahren.

Schritt 1

Ich habe einen NeoPixel-Streifen von Adafruit verwendet, ihn in Stücke geschnitten und in die Formen von Konstellationen arrangiert. Sie können auch andere Arten von LEDs verwenden, wie z. B. die einzelnen RGB-LEDs. Kleben oder nähen Sie sie auf den Grundstoff.

Schritt 2

Legen Sie einen Einlagestoff auf die Oberseite und Sie können die Konstellationen umreißen. Dieser Schritt ist optional, aber ich fand es hilfreich, mehrere Stoffschichten zu verwenden, um die Struktur zu stärken. Ich habe tatsächlich einen anderen dicken Stoff auf die Rückseite des Grundstoffs genäht. Also insgesamt drei Schichten als Basis, die die LEDs einschließen.

Schritt 3

Löten Sie die LEDs. Wenn Sie die vernähbaren Einzel-LEDs verwenden, können Sie diese auch mit leitfähigen Fäden verbinden. In jedem Fall ist es viel Handarbeit und erfordert Geduld. Da ich vier Konstellationen habe (Orion, Big Dipper, Cygnus und Cassiopeia), habe ich sie in vier Spuren unterteilt. Jeder wird mit einem anderen Arduino 101-Pin verbunden.

Verbesserte Schritte

Der Stoff, den ich für die obigen Schritte verwendet habe, war zu weich, was es leicht macht, die LEDs und Drähte zu biegen und die Lötstellen zu brechen. Ich habe den gesamten Prozess mit der folgenden verbesserten Methode erneut durchgeführt.

Positionieren Sie die LEDs

Ich habe einen NeoPixel-Streifen von Adafruit verwendet und ihn in Stücke geschnitten und in die Formen von Konstellationen arrangiert. Sie können auch andere Arten von LEDs verwenden, wie z. B. die einzelnen RGB-LEDs. Kleben oder nähen Sie sie auf den Grundstoff.

Filz ist ein schöner dicker Stoff, der Struktur verleiht und gut mit Heißkleber funktioniert. Ordnen Sie die LEDs in den entsprechenden Positionen an, sodass ihre Positionen beim Aufleuchten Sterne in Konstellationen widerspiegeln.

Planen Sie die LEDs und Drähte

Kleben Sie die LED-Streifen an einigen Stellen auf Filz. Tragen Sie keinen Kleber unter den gesamten Streifen, da Sie etwas Spielraum benötigen, um die Schrumpfschläuche herumzuschieben, wie in der Abbildung gezeigt. Schneiden Sie die Litzendrähte in die richtigen Längen und legen Sie sie an ihren relativen Positionen auf demselben Filzstück ab. Ich würde empfehlen, die Drähte noch nicht mit Heißkleber zu verkleben. Meine Figur hier ist in dieser Hinsicht ein Fehler. Stattdessen ist es besser, die Drähte mit temporärem Klebeband in ihrer Position zu halten, damit beim Löten der Drähte an die LEDs die Drahtpositionen angepasst werden können.

Fertige alle Teile zum Nähen an

Die Abbildung zeigt, dass ich vier Sternbilder (Orion, Big Dipper, Cygnus und Cassiopeia) auf vier separate Teile vorbereitet habe. Nach dem Löten und Schrumpfen um die Lötstellen können Sie alles fest auf den Filz kleben.

Testen!

Testen Sie Ihre Schaltung, bevor Sie fortfahren! Kann einfach einen NeoPixel Strandtest für jede Spur machen.

Okay, ich habe den Pegel als "Einfach" angegeben, da es wissenschaftlich nicht schwer ist, wenn Sie den Code einmal verstanden haben, aber es erfordert viel Arbeit, die Kabel auf dem Stoff zu stabilisieren.

Stellen Sie sicher, dass Ihre Arduino IDE die neueste Version ist und über die Curie PME-Bibliothek verfügt. Ich würde empfehlen, den Arduino Web Editor zu verwenden. Laden Sie die Bibliothek hier herunter.

Mach das Kleid

Machen Sie parallel (im übertragenen Sinne) das Kleid. Nachdem Sie die Schaltung getestet haben, nähen Sie die Grundstoffe mit den LEDs auf die Innenseite des Kleides. LEDs leuchten durch die Grafiken.

Wie Sie sehen können, ist das Arduino 101 in meiner Hand. Ich habe ein 3D-gedrucktes Gehäuse für das Arduino 101 und die Batterie gemacht. Es gibt lange Drähte, die die LEDs und die Platine verbinden, die in der Hülle versteckt sind.

Der folgende Code gibt Ihnen Informationen darüber, wie das Board programmiert ist. Nachdem Sie den Code geflasht haben, trainieren Sie zuerst die Neuronen, damit sie lernen, welche Muster vorhanden sind. Sehen Sie sich dieses Video um ~0:30 Uhr an:

Für weitere Fotos und andere Tech-Fashion/Gemälde-auf-Stoff-Designs besuchen Sie meine Website :)

Code

  • PME_4LED_new.ino
  • PME_LED
PME_4LED_new.inoArduino
Dies ist ein aktualisiertes Skript aus dem vorherigen. Es speichert die Trainingsdaten. Derzeit ist es mit einem Initialisierungsschritt eingerichtet. Die erste Reihe von LEDs zeigt Rot, wenn das Gerät eingeschaltet ist. Halten Sie den Arduino101 flach, wobei der USB-Anschluss in horizontaler Richtung zeigt, während Sie die Taste drücken, um die Verwendung aus dem vorherigen Training zu ermöglichen. Diese LEDs wechseln auf Grün und dann auf Blau, wenn die Taste losgelassen wird, um anzuzeigen, dass das System bereit ist. Wenn der Arduino101 mit dem USB-Port in vertikaler Richtung gehalten wird, während die Taste gedrückt wird, werden vorherige Trainingsdaten gelöscht. Das System kann nach dem Loslassen der Taste neu trainiert werden.
/* * Dieses Beispiel demonstriert die Verwendung der Pattern Matching Engine (CuriePME) * zum Klassifizieren von Beschleunigungsmesserdatenströmen von CurieIMU. * * Zuerst fordert die Skizze Sie auf, einige Buchstaben in die Luft zu zeichnen (stellen Sie sich nur * vor, Sie schreiben auf einem unsichtbaren Whiteboard und verwenden Ihre Tafel als * Stift), und die IMU-Daten dieser Bewegungen werden als Trainingsdaten für verwendet die *PME. Sobald das Training abgeschlossen ist, können Sie weiter Buchstaben zeichnen und der PME * versucht zu erraten, welchen Buchstaben Sie zeichnen. * * Für dieses Beispiel muss eine Taste mit dem digitalen Pin 4 verbunden werden * https://www.arduino.cc/en/Tutorial/Button * * HINWEIS:Für beste Ergebnisse zeichnen Sie große Buchstaben mit einer Höhe von mindestens 1-2 Fuß. * * Copyright (c) 2016 Intel Corporation. Alle Rechte vorbehalten. * Siehe Lizenzhinweis am Ende der Datei. */#include "CurieIMU.h"#include "CuriePME.h"#include #include #include #define PINM 6 //// Welcher Pin sind die NeoPixel verbunden mit?#define PINC 3#define PINS 9#define PINO 5 Adafruit_NeoPixel stripM =Adafruit_NeoPixel(10, PINM, NEO_GRB + NEO_KHZ800); /// der Streifen ist 15 Pixel lang. Sie können dies für die Anzahl der Pixel in Ihrem individuellen Strip ändern.Adafruit_NeoPixel stripS =Adafruit_NeoPixel(10, PINS, NEO_GRB + NEO_KHZ800);Adafruit_NeoPixel stripC =Adafruit_NeoPixel(10, PINC, NEO_GRB + NEO_fruitHZ800); , NEO_GRB + NEO_KHZ800);int tr =0; //Einige Variablen zum Halten von "color-target" und "color-current" zum Glätten...int tg =0;int tb =0;int r =0;int g =0;int b =0;int rawX =0; ///// um Werte aus dem Accelerometer des Curie zu haltenint rawY =0;//int rawZ =0;float angle =0.0;/* Dies steuert, wie oft ein Buchstabe während des Trainings gezeichnet werden muss. * Jeder höher als 4, und Sie haben möglicherweise nicht genug Neuronen für alle 26 Buchstaben * des Alphabets. Ein niedrigerer Wert als 4 bedeutet weniger Arbeit für Sie, einen Buchstaben zu trainieren, * aber der PME kann diesen Buchstaben möglicherweise schwerer einordnen. */const unsigned int trainingReps =4;/* Erhöhen Sie dies auf 'AZ', wenn Sie möchten-- das Training dauert nur viel länger */const unsigned char trainingStart ='A';const unsigned char trainingEnd ='D'; /* Der Eingangs-Pin, der verwendet wird, um zu signalisieren, dass ein Buchstabe gezeichnet wird - Sie müssen * sicherstellen, dass ein Knopf an diesem Pin angeschlossen ist */const unsigned int buttonPin =4;/* Abtastrate für Beschleunigungsmesser */const unsigned int sampleRateHZ =200;/* Anzahl der Bytes, die ein Neuron aufnehmen kann */const unsigned int vectorNumBytes =128;/* Anzahl der verarbeiteten Samples (1 Sample ==accel x, y, z) * die in ein Neuron passen * /const unsigned int samplePerVector =(vectorNumBytes / 3);/* Dieser Wert wird verwendet, um ASCII-Zeichen AZ * in Dezimalwerte 1-26 und wieder zurück zu konvertieren. */const unsigned int upperStart =0x40;const unsigned int sensorBufSize =2048;const int IMULow =-32768;const int IMUHigh =32767;const char *filename ="NeurDataDress.dat";void setup(){ Serial.begin(9600 .) ); //während(!Seriell); pinMode (buttonPin, INPUT); /* IMU (Intertial Measurement Unit) starten */ CurieIMU.begin(); /* PME (Pattern Matching Engine) starten */ CuriePME.begin(); CurieIMU.setAccelerometerRate(sampleRateHZ); CurieIMU.setAccelerometerRange(2); /* Drin. SPI-Flash-Chip */ if (!SerialFlash.begin(ONBOARD_FLASH_SPI_PORT, ONBOARD_FLASH_CS_PIN)) {Serial.println("Zugriff auf SPI-Flash-Chip nicht möglich"); } stripM.begin(); // Neopixelstreifen initialisieren stripS.begin(); stripC.begin(); stripO.begin(); stripM.show(); // Alle Pixel auf 'off' initialisieren stripS.show(); stripC.show(); stripO.show(); solidM(stripM.Color(255, 0, 0), 50); //Rot für eingabebereit}/* Diese Funktion liest die Datei, die im vorherigen Beispiel gespeichert wurde. * Die Datei enthält alle Daten, die gelernt und dann zuvor gespeichert wurden. * Sobald das Netzwerk wiederhergestellt ist, kann es Muster wieder klassifizieren, ohne * neu trainiert werden zu müssen.*/void restoreNetworkKnowledge ( void ){ SerialFlashFile file; int32_t fileNeuronCount =0; Intel_PMT::neuronData neuronData; // Datei öffnen und Testdatendatei schreiben =SerialFlash.open (Dateiname); CuriePME.beginRestoreMode(); if (file) {// über das Netzwerk iterieren und die Daten speichern. while(1) {Serial.print("Lesen Neuron:"); uint16_t neuronFields[4]; file.read( (void*) neuronFields, 8); file.read( (void*) neuronData.vector, 128 ); neuronData.context =neuronFields[0]; neuronData.influence =neuronFields[1]; neuronData.minInfluence =neuronFields[2]; neuronData.category =neuronFields[3]; if (neuronFields[0] ==0 || neuronFields[0]> 127) Pause; fileNeuronCount++; // dieser Teil gibt nur jedes Neuron aus, wenn es wiederhergestellt wird, // damit Sie sehen können, was passiert. Serial.print (DateiNeuronCount); Serial.print("\n"); Serial.print (neuronFields[0]); Serial.print ( "\t"); Serial.print (neuronFields[1]); Serial.print ( "\t"); Serial.print (neuronFields[2]); Serial.print ( "\t"); Serial.print (neuronFields[3]); Serial.print ( "\t"); Serial.print (neuronData.vector[0]); Serial.print ( "\t"); Serial.print (neuronData.vector[1]); Serial.print ( "\t"); Serial.print (neuronData.vector[2]); Serial.print( "\n"); CuriePME.iterateNeuronsToRestore(neuronData); } } CuriePME.endRestoreMode(); Serial.print("Wissenssatz wiederhergestellt. \n");}boolean longPress=false;int startTime=0;int lastOrientation =- 1; // vorherige Orientierung (zum Vergleich)int lastReading =-1;boolean lastPress=false;void loop (){ int orientierung =- 1; // die Ausrichtung des Boards String AusrichtungString; // Zeichenfolge zum Drucken der Ausrichtungsbeschreibung // Die Ausrichtungen der Platine:// 0:Flach, Prozessor nach oben // 1:Flach, Prozessor nach unten // 2:Querformat, analoge Pins nach unten // 3:Querformat, analog Pins oben // 4:Hochformat, USB-Anschluss oben // 5:Hochformat, USB-Anschluss unten // Beschleunigungsmesser lesen:int x =CurieIMU.readAccelerometer (X_AXIS); int y =CurieIMU.readAccelerometer(Y_AXIS); int z =CurieIMU.readAccelerometer(Z_AXIS); // Berechne die absoluten Werte, um den größten zu bestimmen int absX =abs(x); int absY =abs(y); int absZ =abs(z); if ( (absZ> absX) &&(absZ> absY)) { // Basisorientierung auf Z if (z> 0) {orientString ="up"; Orientierung =0; } Else { OrientierungString ="unten"; Ausrichtung =1; } } Else if ((absY> absX) &&(absY> absZ)) {// Basisorientierung auf Y if (y> 0) {orientationString ="digitale Pins up"; Ausrichtung =2; aufrechtzuerhalten. } else { orientierungString ="analoge Pins hoch"; Ausrichtung =3; } } else { // Basisorientierung auf X if (x <0) {orientString ="connector up"; Ausrichtung =4; } Else { OrientierungString ="Anschluss unten"; Ausrichtung =5; } } // Wenn sich die Ausrichtung geändert hat, eine Beschreibung ausdrucken:if (orientation !=lastOrientation) { Serial.println (orientationString); lastOrientation =Orientierung; } // wenn sich die Orientierung geändert hat, eine Beschreibung ausdrucken:if (orientation !=lastOrientation) { lastOrientation =orientierung; } Int Reading =digitalRead (buttonPin); if (lastReading! =lesen) {Serial.print ("buttonPin="); Serial.println (Lesen); lastReading =Lesen; } if (lesen ==HIGH) { if (startTime ==0) { startTime=millis(); aufrechtzuerhalten. Sonst if ((millis() - startTime)>2000) { LongPress=true; if (!lastPress) {Serial.println("longPress"); // Grün für langes Drücken solidM(stripM.Color (0, 255, 0), 50); // Grün lastPress=true; } } } if (lesen ==LOW &&longPress) {blackout(5); Serial.print("Orientierung="); Serial.print (Ausrichtung); Serial.print("SerialFlash.exists(Dateiname)="); Serial.println (SerialFlash.exists (Dateiname)); if (Orientierung!=4 &&SerialFlash.exists(Dateiname)) { restoreNetworkKnowledge(); Serial.print ("Training wiederhergestellt."); aufrechtzuerhalten. Sonst { trainLetters(); Stromausfall(5); Serial.print ("Training abgeschlossen."); } Serial.println(" Zeichnen Sie nun einige Buchstaben (denken Sie an "); Serial.println ("Halten Sie die Taste gedrückt) und sehen Sie, ob die PME sie klassifizieren kann."); solidM(stripM.Color(0, 0, 255), 500); // Blau für den passenden Blackout (5); // zum Abgleichen ausschalten während (true) { match (); aufrechtzuerhalten. // jedes Pixel ausschalten} stripM.show (); delay(wait);}void blackout(uint8_t wait) { for (uint16_t i=0; i (num * 3) - (Schritt * 3)) { ret =Samples [pos]; aufrechtzuerhalten. Sonst {ret =0; pos -=(Schritt * 3); for (unsigned int i =0; i  sensorBufSize) { break; aufrechtzuerhalten. while (i  
PME_LEDArduino
Dies verwendet die Curie PME, um LEDs zu steuern. Es ist im Grunde eine Kombination aus dem Draw in the Air PME-Code und dem Adafruit NeoPixel-Beispielcode. Dieser Code ist nicht genau das, was ich verwendet habe (was ein bisschen komplex ist), da ich bezweifle, dass Sie genau die gleiche Art von Konstellation treffen werden. Stattdessen finden Sie hier einen generischen Code, den Sie ändern können, um Ihren Bedarf zu personalisieren, z. Sie können ändern, wie die Pins für verschiedene LED-Streifen verteilt werden. Ich kann es später mit einem verbesserten Code aktualisieren.
/* * Dieses Beispiel zeigt die Verwendung der Pattern Matching Engine (CuriePME) * zum Klassifizieren von Beschleunigungsmesserdatenströmen von CurieIMU. Der Code ist eine Modifikation des Draw in the Air-Beispiels:* https://github.com/01org/Intel-Pattern-Matching-Technology * * Zuerst wird die Skizze aufgefordert Muster in der Luft zu zeichnen (nur * vorstellen, dass Sie auf einem unsichtbaren Whiteboard, mit dem Board als die schreiben * Stift), und die IMU-Daten dieser Bewegungen werden als Trainingsdaten für die * PME verwendet. Sobald das Training abgeschlossen ist, können Sie weiter Buchstaben zeichnen und der PME * versucht zu erraten, welchen Buchstaben Sie zeichnen. * * Für dieses Beispiel muss eine Taste mit dem digitalen Pin 4 verbunden werden * https://www.arduino.cc/en/Tutorial/Button * * HINWEIS:Für beste Ergebnisse zeichnen Sie große Buchstaben mit einer Höhe von mindestens 1-2 Fuß. * * Copyright (c) 2016 Intel Corporation. Alle Rechte vorbehalten. * Siehe Lizenzhinweis am Ende der Datei. */#include "CurieIMU.h"#include "CuriePME.h"#include #define PIN 6 //// mit welchem ​​Pin sind die NeoPixel verbunden?Adafruit_NeoPixel strip =Adafruit_NeoPixel(54, PIN, NEO_GRB + NEO_KHZ800); /// der Streifen ist 15 Pixel lang. You can change this for the number of pixels in your individual strip.int tr =0; //Some variables to hold "color-target" and "color-current" for smoothing...int tg =0;int tb =0;int r =0;int g =0;int b =0;int rawX =0; ///// to hold values from the Curie's accelerometerint rawY =0;//int rawZ =0;float angle =0.0;/* This controls how many times a letter must be drawn during training. * Any higher than 4, and you may not have enough neurons for all 26 letters * of the alphabet. Lower than 4 means less work for you to train a letter, * but the PME may have a harder time classifying that letter. */const unsigned int trainingReps =4;/* Increase this to 'A-Z' if you like-- it just takes a lot longer to train */const unsigned char trainingStart ='A';const unsigned char trainingEnd ='D';/* The input pin used to signal when a letter is being drawn- you'll * need to make sure a button is attached to this pin */const unsigned int buttonPin =4;/* Sample rate for accelerometer */const unsigned int sampleRateHZ =200;/* No. of bytes that one neuron can hold */const unsigned int vectorNumBytes =128;/* Number of processed samples (1 sample ==accel x, y, z) * that can fit inside a neuron */const unsigned int samplesPerVector =(vectorNumBytes / 3);/* This value is used to convert ASCII characters A-Z * into decimal values 1-26, and back again. */const unsigned int upperStart =0x40;const unsigned int sensorBufSize =2048;const int IMULow =-32768;const int IMUHigh =32767;void setup(){ Serial.begin(9600); // while(!Serial); pinMode (buttonPin, INPUT); /* Start the IMU (Intertial Measurement Unit) */ CurieIMU.begin(); /* Start the PME (Pattern Matching Engine) */ CuriePME.begin(); CurieIMU.setAccelerometerRate(sampleRateHZ); CurieIMU.setAccelerometerRange(2); trainLetters(); //Serial.println("Training complete. Now, draw some letters (remember to "); // Serial.println("hold the button) and see if the PME can classify them."); strip.begin(); // intialize neopixel strip strip.show(); // Initialize all pixels to 'off'}void loop (){ /// these functions are written out at the bottom of the sketch. Serial.println("Training complete. Now, draw some letters (remember to ");Serial.println("hold the button) and see if the PME can classify them."); byte vector[vectorNumBytes]; unsigned int category; char letter; char pattern; /* Record IMU data while button is being held, and * convert it to a suitable vector */ readVectorFromIMU(vector); /* Use the PME to classify the vector, i.e. return a category * from 1-26, representing a letter from A-Z */ category =CuriePME.classify(vector, vectorNumBytes); if (category ==CuriePME.noMatch) { Serial.println("Don't recognise that one-- try again."); //theaterChase(); theaterChase(strip.Color(127, 127, 127), 50); // White strip.show(); // delay(10); } else { letter =category + upperStart; pattern =letter; if ( pattern =='A' ) { //red colorWipe(strip.Color(0, 255, 0), 50); // Green theaterChase(strip.Color(127, 127, 127), 50); // White strip.show(); } else if ( pattern =='B') { colorWipe(strip.Color(255, 0, 0), 50); // Red theaterChase(strip.Color(127, 127, 127), 50); // White strip.show(); } else if ( pattern =='C') { colorWipe(strip.Color(0, 0, 255), 50); // Blue theaterChase(strip.Color(127, 127, 127), 50); // White strip.show(); } else if ( pattern =='D') { colorWipe(strip.Color(255, 0, 255), 50); // Blue theaterChase(strip.Color(127, 127, 127), 50); // White strip.show(); }Serial.println(letter); } }/* Simple "moving average" filter, removes low noise and other small * anomalies, with the effect of smoothing out the data stream. */byte getAverageSample(byte samples[], unsigned int num, unsigned int pos, unsigned int step){ unsigned int ret; unsigned int size =step * 2; if (pos <(step * 3) || pos> (num * 3) - (step * 3)) { ret =samples[pos]; } else { ret =0; pos -=(step * 3); for (unsigned int i =0; i  sensorBufSize) { break; } } } undersample(accel, samples, vector);}void trainLetter(char letter, unsigned int repeat){ unsigned int i =0; while (i  

Schaltpläne

It's just connecting the LEDs to the Arduino 101 pins and a button to pin 4 (as described in the code:https://www.arduino.cc/en/Tutorial/Button). The circuit diagram is similar to this Fritzing from Adafruit:https://learn.adafruit.com/adafruit-neopixel-uberguide/basic-connections
I plugged the 9 V battery directly into the barrel jack.

Herstellungsprozess

  1. Kleidungsmuster
  2. Bauen von Arduino-Steckbrettern ohne Überbrückungsdrähte
  3. DHT11-Sensor mit LEDs und einem Piezo-Lautsprecher
  4. Arduino Spybot
  5. FlickMote
  6. Selbstgemachter Fernseher B-Gone
  7. Hauptuhr
  8. Arduino + LEDs + MIDI-Keyboard + MuseScore =Klavierlehrer
  9. Alexa-gesteuerte LEDs über Raspberry Pi
  10. Finde mich