Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Wizards Walking Staff

Componenten en benodigdheden

Arduino 101
× 1
$4 Pololu-spanningsregelaar
× 1
3x AA-batterijhouder met schakelaar
× 1
AA-batterijen
Elk type is prima. Je hebt er 3 nodig.
× 1
M Barrel Jack-adapter
$ 1,95 Deze maken het gemakkelijk om de stroom aan te sluiten en los te koppelen
× 1
F Barrel Jack-adapter
$ 1,95 Deze maken het gemakkelijk om de stroom aan te sluiten en los te koppelen
× 1
Adreseerbare LED-strip
Het voorbeeld is geschreven voor alle NeoPixel-compatibele LED's, strip van 60 pixels.
× 1
Sporttape
Elke soort textieltape. Dit wordt gebruikt om de elektronica op de staf te houden en een mooie grip te geven.
× 1
Elastiekjes
Om de onderdelen op de baak op hun plaats te houden totdat je tape kunt gebruiken.
× 1
Een staf. (bezemsteel, sproeibuis, natuurlijke wandelstok, enz.)
× 1

Apps en online services

Arduino IDE

Over dit project

Dit project maakt gebruik van de Arduino 101, een batterij en een LED-strip om een ​​gebarengestuurde Wizard's Walking Staff te maken. We zullen drie verschillende "spreuken" voor lichtweergave definiëren die je kunt oproepen door de notenbalk in een van de drie bewegingen te bewegen.

Techniek:

De code gebruikt de Inertial Measurement Unit in de Arduino 101 om G-krachten te lezen, maar maakt geen gebruik van de Pattern Matching Engine (kijk bijvoorbeeld eens naar het PME-project van Kitty Yeung). In plaats daarvan telt deze code snelle impulsen in de X-, Y- en Z-richtingen en roept spreuken op wanneer je een bepaalde combinatie in korte tijd uitvoert.

Sprekende spreuken:

Twee snelle verticale tikken starten een spreuk, daarna kun je de staf scherp naar voren, naar links/rechts verplaatsen of een derde keer tikken om een ​​van de drie spreuken te selecteren, waarna een laatste tik de spreuk uitspreekt.

Visuele feedback:

Om u te helpen begrijpen waar u zich in uw gebaar bevindt, bevat de voorbeeldcode visuele feedback van de ledstrip. Wanneer je voor het eerst dubbel tikt, knipperen de lampjes snel wit, wat aangeeft dat er een spreuk is gestart. Je krijgt visuele feedback voor elke stap, zodat je weet welke spreuk wordt geselecteerd.

Sprekende spreuken (in detail):

Houd de staf met de Arduino 101 naar je toe gericht. Dubbeltik eerst met de staf (zachtjes!) op de grond, of doe twee snelle verticale pulsen in de lucht. Wanneer je de witte flits ziet, beweeg je de notenbalk scherp naar voren of naar achteren om Spell 1 te selecteren, of kantel je de notenbalk naar links of rechts om Spell 2 te selecteren, of beweeg je een derde keer verticaal om Spell 3 te selecteren. Wanneer een spreuk is geselecteerd, gaan de lichten brandt ononderbroken groen (spell 1,) blauw (spell 2) of rood (spell 3.) Zodra de lichten ononderbroken zijn, roept u de spreuk op met een laatste verticale tik. De lichten zullen flikkeren en knipperen in de geselecteerde kleur.

Gebaren zijn tijdgevoelig! Je hebt maar 1 seconde tussen elke stap in een gebaar, anders wordt de spreuk gereset. Dat betekent dat als je het verprutst of de verkeerde spreuk selecteert, je even kunt wachten en opnieuw kunt beginnen. Het nauwkeurig oproepen van spreuken is een beetje lastig om onder de knie te krijgen, maar het goede nieuws is dat spreuken niet per ongeluk worden opgeroepen als je gewoon met de staf rondloopt.

De elektronica bouwen:

Dit is eigenlijk gewoon een Arduino 101, een batterij en een strip NeoPixel-LED's.

Er zijn verschillende manieren om het vermogen te configureren. Het snelst zou zijn om een ​​9v-batterij te gebruiken en de LED's direct van de Arduino 101 te laten lopen, maar de levensduur van de batterij zou erg kort zijn. Je kunt ook een LiPo-batterij gebruiken om het vermogen/gewicht te maximaliseren voor een meer "professionele" constructie, maar je hebt een veilige manier nodig om de batterij op te laden. Voor mij is een goede balans tussen levensduur van de batterij en eenvoud het gebruik van 3 AA-batterijen en een spanningsregelaar van $ 4. Dit is dezelfde elektronica-opstelling als in het Shadow Theater en de Kaleidoscope Infinity Mirror.

Stap 1

Verzamel het eindharnas van uw LED-strip door ongeveer 1 cm van het uiteinde van de lampen af ​​te knippen. Strip de draadeinden.

Stap 2

Breek de gebogen header-pinnen die bij uw spanningsregelaar zijn geleverd uit elkaar en soldeer er twee aan de uiteinden van de groene en gele draden. Hierdoor kunt u ze gemakkelijk in de pinnen van de Arduino 101 steken.

Stap 3

Soldeer vervolgens de rode draad aan de VIN-aansluiting op de spanningsregelaar en soldeer twee rechte headers in de GND- en VOUT-pinnen zoals weergegeven.

Stap 4

Sluit nu de barrel jack-adapters aan. Strip eerst de uiteinden van de draden die uit uw batterijhouder komen, monteer ze vervolgens in de klemmen van de mannelijke cilinderaansluiting en draai ze vast met een schroevendraaier. ROOD gaat naar de (+) terminal, ZWART gaat naar de (-) terminal.

Sluit vervolgens de vrouwelijke barrel jack-adapter aan op de losse draden die uit het begin van de LED-strip komen. GEEL gaat naar de (-) terminal, en ROOD gaat naar de (+).

Stap 5

Sluit nu uw kabelboom aan op de Arduino 101. De GROENE draad gaat naar PIN 6, de GELE draad gaat naar de GND-pin bij #13. Met de twee header-pinnen op de spanningsregelaar gaat GND naar GND en VOUT gaat naar de "VIN"-pin op de Arduino 101. Begrijp dit niet verkeerd! Achterwaarts aansluiten leidt tot geurtjes en brandwonden. Ik weet dit.

De voorbeeldcode uploaden:

Stap 1

Terwijl de batterij is uitgeschakeld, gebruikt u een USB-kabel om uw Arduino 101 op een computer aan te sluiten en uploadt u de bijgevoegde voorbeeldcode met behulp van de Arduino IDE.

Als je nog nooit een Arduino 101 hebt geprogrammeerd, vind je hier geweldige instructies op de Arduino-website:https://www.arduino.cc/en/Guide/Arduino101

Zodra de voorbeeldcode met succes is geladen, kunt u de USB loskoppelen en de code testen door de batterij aan te zetten en enkele spreukgebaren te proberen met de USB-poort op de Arduino 101 naar beneden gericht en met de pinnen naar u toe gericht. Probeer het bord vier keer verticaal te bewegen om de rode spreuk te roepen.

Codediscussie:

(Als je de voorbeeldcode gewoon wilt gebruiken zoals hij is, kun je verder gaan naar De staf bouwen.)

De voorbeeldcode gebruikt de schokdetectiecapaciteit van de Arduino 101 om schokken te tellen, terwijl er een timer loopt die het aantal schokken na korte tijd terugzet op nul zonder nieuwe schokken. Als je de juiste combinatie raakt voordat de timer afloopt, wordt een "spell"-functie aangeroepen.

Omdat een stevige tik op de grond daadwerkelijk de eerste schok registreert plus verschillende "ruis" -schokken van de trillingen in de staf, probeert de eerste code in lus gewoon een dominante impuls te vinden van elke reeks schokken en deze eenvoudig te categoriseren als verticaal, links/rechts of voor/achter. Ik gebruik een variabele die 'gebaar' wordt genoemd om elke dominante impuls vast te houden:1 =verticale impuls, 2 =voor-/achterimpuls, 3 =links/rechts-impuls.

Om vervolgens combinaties te volgen, gebruikt de code een "switch" -instructie en beweegt er doorheen terwijl gebaren zich ophopen. Het is een soort "kies je eigen avontuur"-boek, waarin bij elke stap iets staat als "als de volgende impuls links/rechts is, ga dan verder met stap 2, als de timer is afgelopen, ga dan terug naar nul."

Spellen:

Hier kun je eenvoudig veranderen wat elke spreuk doet. Deze draaien momenteel gewoon "theater-chase" voorbeeldcode in verschillende kleuren. U kunt hier eenvoudig meer toevoegen, de kleuren wijzigen of uw eigen lichtfunctie schrijven. De eerste drie variabelen in de theaterChase-functie zijn waarden voor rood, groen en blauw. Het laatste cijfer is de snelheid (hoger cijfer =langzamer).

//////////////////////////////////////////// /////spells////////////////////// void tapspell() { ///rode theaterlichten theaterChase(strip.Color(127, 20, 0 ), 20); theaterChase(strip.Color(127, 20, 50), 55); strip.show(); } void leftspell() { theaterChase(strip.Color(0, 0, 100), 20); theaterChase(strip.Color(0, 30, 120), 75); strip.show(); } void forwardspell() { theaterChase(strip.Color (0, 127, 0), 30); theaterChase(strip.Color(0, 127, 90), 55); strip.show(); }  

De staf opbouwen:

Hier is veel ruimte voor creativiteit! Ik zal me concentreren op de technische basisconstructie, maar veel plezier met het maken van een unieke staf. Lichtdiffusers zoals tule, tissuepapier of een plastic fles over de LED's kunnen zeer coole lichtdisplays maken!

Stap 1:zoek een wandelstok/staf

Je kunt een bezemsteel, een sproeibuis gebruiken of een natuurlijke stok zoeken. Michael's ambachtelijke winkels verkopen ook leuke. (In de stick-sectie, eigenlijk.) Ik vind het leuk om een ​​sectie in te pakken met sporttape om een ​​schoon werkgebied voor de elektronica te hebben, maar dat is optioneel.

Doe een paar elastiekjes op de staf om het bevestigen van dingen gemakkelijker te maken.

Stap 2:plaats de Arduino 101 op de staf met de USB-poort omlaag

Gebruik een elastiekje om de Arduino 101 op zijn plaats te houden.

Stap 3:Gebruik een elastiekje om aan beide uiteinden te helpen, omwikkel de LED's

Stap 4:Wikkel sporttape om de Arduino 101 en het batterijpakket vast te zetten

Zorg ervoor dat u toegang laat tot de aan/uit-schakelaar op het batterijpakket. U wilt dat het batterijpakket veilig is voor stoten / tikken, maar onthoud dat u die batterijen uiteindelijk moet vervangen.

Stap 5:Verspreid de LED-verlichting en versier

Code

  • Wizard Walking Staff Voorbeeldcode
Wizard Walking Staff VoorbeeldcodeArduino
Tel impulsen op de x-, y- en z-as, bepaalde impulscombinaties roepen "spreuken" (lichtweergaven) op een neopixelstrook op.
/* Copyright (c) 2016 Intel Corporation. Alle rechten voorbehouden. Zie licentiekennisgeving aan het einde van het bestand.*//* Arduino 101 "Wizard's Walking Staff." Deze code maakt gebruik van de Adafruit Neopixel-bibliotheek. Installatie-instructies voor de bibliotheek hier:https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation Zorg ervoor dat de nieuwste Intel Curie Core is geïnstalleerd. Ga voor meer informatie naar https://www.arduino.cc/en/Guide/Arduino101*/#include "CurieIMU.h"#include #define PIN 6 //// welke pin zijn de NeoPixels aangesloten naar?Adafruit_NeoPixel strip =Adafruit_NeoPixel(60 , PIN, NEO_GRB + NEO_KHZ800); /// de strip is 60 pixels lang.int tr =0; //Sommige variabelen om kleurdoel en kleurstroom vast te houden voor afvlakking ... int tg =0;int tb =0;int r =0;int g =0;int b =0;long int globaltimer =0; /// timers om gebaren versus tijd bij te houden... voor dingen als "als de timer nog geen 0,5 sec heeft gepasseerd, EN er zijn twee keer tikken, dan..." long int gebarentimer =0;long int ledtimer =0;int vervagen =10; /// hoe snel lichten vervagen. Gebruikt voor smoothingint tap =0; // teller voor verticale impulsenint lr =0; // teller voor links/rechts impulsenint fb =0; //counter voor vooruit/achteruit impulsenint gebaar =0; // int-status =0; /// voor onze schakelkast ... dit houdt elke beweging bij in een series.void setup() { // plaats hier je setup-code om één keer uit te voeren://Serial.begin (9600); globaltimer =millis(); // start tijdwaarnemers op de huidige tijd gebarentimer =millis(); ledtimer =millis(); /* Initialiseer de IMU */ CurieIMU.begin(); CurieIMU.attachInterrupt(eventCallback); /* Schokdetectie inschakelen */ CurieIMU.setDetectionThreshold (CURIE_IMU_SHOCK, 1500); // 1.5g =1500 mg CurieIMU.setDetectionDuration (CURIE_IMU_SHOCK, 50); // milliseconden piek nodig om Interrupt CurieIMU.interrupts (CURIE_IMU_SHOCK) aan te roepen; strip.begin(); // initialiseer neopixel strip strip.show(); // Initialiseer alle pixels op 'off'}void loop() { // plaats hier je hoofdcode om herhaaldelijk uit te voeren:////basisfilter - de IMU registreert meerdere schokken van rebound en tegenactie. Dit probeert de dominante schok in elk gebaar te vangen. if (millis() - globaltimer> 170) { /// dit probeert de dominante bewegingsas voor elke schok te vinden.. Vergelijkt de som van tikken, links-rechts en voor-achter bewegingen, en kiest de grootste. if ((tik> lr) &&(tik> fb)) { Serial.println("tap"); gebaar =1; tik op =0; lr =0; fb =0; //// reset waarden nadat een beweging is geclassificeerd. } else if ((lr> fb) &&(lr> tik)) { Serial.println("lr"); gebaar =2; tik op =0; lr =0; fb =0; } else if ((fb> lr) || (fb> tik)) { Serial.println("fb"); gebaar =3; tik op =0; lr =0; fb =0; } }//////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////// if (millis() - globaltimer> 1000) { /////timeoutreset globaltimer =millis() - 170;tr =0; tg=0; tb =0; staat =0; //gebaar=0; } if (millis() - gebarentimer> 1000) { gebarentimer =millis() - 350;tr =0; tg =0; tb =0; staat =0; //gebaar=0; }///////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////// schakelaar (status) { // Dit volgt gebaren case 0:{ /// nog geen gebaren opgenomen... luister naar tik. Als er een is, ga dan naar geval 1. if (millis() - gebarentimer> 350) { if (gesture ==1) { state =1; gebaar =0; gebarentimer =millis(); } } pauze; } geval 1:{ ///// één tik opgenomen. Als er een tweede keer wordt getikt, flits dan snel en ga naar stap 2. if (millis() - gebarentimer> 350) { if (gesture ==1) { r=10;g=10;b=10; ///feedback flitsstatus =2; gebaar =0; gebarentimer =millis(); } } pauze; } geval 2:{ ///////Schakelpunt - twee tikken opgenomen. De drie spreuken lopen hier uiteen op basis van het volgende gebaar. Als het een tik is, ga dan naar geval 3. Als het L/R is, ga naar geval 4. Als het voor/achter is, ga naar geval 5. if (millis() - gebarentimer> 350) { if (gesture ==1) { staat =3; gebaar =0; gebarentimer =millis(); } if (gebaar ==2) { staat =4; gebaar =0; gebarentimer =millis(); } if (gebaar ==3) { staat =5; gebaar =0; gebarentimer =millis(); } } pauze; } geval 3:{ //// drie tikken opgenomen... we zijn in de tap-spreuk, draai de staf rood en luister naar de laatste "tik" om de spreuk te laten afgaan. tr =20; tg =0; tb =0; globaltimer =millis()-250; if (millis() - gebarentimer> 350) { if (gesture ==1) { state =0; Serial.println("tapspell!"); tapspell(); } } pauze; } geval 4:{ ///// twee tikken en een L of R opgenomen... we zijn in de linkerspell, draai de notenbalk blauw en luister naar de laatste "tik" om de spreuk te laten afgaan. tr =0; tg =0; tb =20; globaltimer =millis()-250; if (millis() - gebarentimer> 350) {; if (gebaar ==1) { staat =0; Serial.println("leftspell!"); linkerspell(); } } pauze; } geval 5:{ ///// //// twee tikken en een voorwaartse of achterwaartse opname... we zijn in de voorwaartse spelling, draai de notenbalk groen en luister naar de laatste "tik" om de spreuk te laten afgaan. tr =0; tg =20; tb =0; globaltimer =millis()-250; if (millis() - gebarentimer> 350) { if (gesture ==1) { state =0; Serial.println ("forwardspell!"); voorwaartse spelling(); } } pauze; }standaard:{ breken; } } //Serial.println(tr); if (millis()-ledtimer> fade){ /// doe deze volgende stap alleen periodiek om de (fade-waarde) milliseconden. In tegenstelling tot de functie "delay()", kunnen er andere dingen in het programma gebeuren tussen updates in. /// kleurvereffening. De werkelijke kleur beweegt naar de doelkleur... Als het doel meer dan de huidige is, ga dan naar boven, als het minder is, ga naar beneden. als (tr> r + 1) { r++; } if (tg> g + 1) { g++; } if (tb> b + 1) { b++; } als (tr   

Productieproces

  1. AC elektrische velden detecteren
  2. Vermogensberekeningen
  3. Zeven manieren om uw nabewerkingsfase veiliger te maken
  4. Voedselkleur:de essentiële ingrediënten om voedsel aantrekkelijk te maken
  5. Hoe een IoT-bedrijfsmodel te laten werken – of niet?!
  6. Maak je eigen Google Voice HAT
  7. Hoe maak je een Arduino+Raspberry Pi-robotplatform
  8. Hoe maak je glasvezel
  9. Hoe maak je een spuitgietmatrijs
  10. Elke dag kan de dag van de fabricage zijn!
  11. Hoe maak je een Cutaway-animatie in Solidworks