Turinys:
- 1 žingsnis: „Componenten Verzamelen“
- 2 žingsnis: „Bouwen“prototipas
- 3 žingsnis: kodo prototipas
- 4 žingsnis: „Uittesten“prototipas
- 5 žingsnis: „Ontmantelen“„Behuizing“en Kijken Welke Componenten Gebruikt Gaan Worden
- 6 žingsnis: „Werking Originele“mygtukai + „Dremelen“
- 7 žingsnis: Bedrading Solderen + Buttons Vastlijmen
- 8 žingsnis: „Plats Maken“De Behuizing
- 9 žingsnis: „Bedansing Aansluiten Op Protobord“
- 10 žingsnis: „Verstevigen“
- 11 žingsnis: „Code Voor Het Communiceren Met Reaper“
- 12 žingsnis: valdiklis „Uittesten“
Video: „Guitar Hero Arduino“projektas: 12 žingsnių (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Wij zijn Maarten Vrebos, Justin Cavanas ir Wannes Stroobandt bei studijuojame daugialypės terpės ir komunikacijos technologijas. Voor een groepsproject voor het vak Audiovisual & IT Principles hebben wij een Guitar Hero-gitaar gehackt en gebruikt als behuizing voor onze MIDI-controller. Het was onze bedoeling om de bestaande knoppen op de gitaar intern te vervangen. „Onze“valdiklis yra platus ir nemokamas. Aangezien we iets hebben gehackt hebben we er niet veel extra material in moeten verwerken.
In de afbeelding kan u onze allereerste schets op papier zien van hoe het eindproduct er zou moeten uitzien met daarnaast een photo van de gitaar die als behuizing zal worden gebruikt.
Wij hebben ons voor dit project gebaseerd op volgende bronnen:
slapyak.wordpress.com/guitar-hero-midi-con…
www.instructables.com/id/Converting-a-rescu…
gizmodo.com/391834/turn-your-guitar-hero-g…
Benodigdheden voor dit projektas
- 6 klaine mygtukai
- 7 1 khm rezistoriai
- 1 geležies šviesos diodas 1
- mėlynas šviesos diodas
- 1 „Arduino Uno R3“
- 1 šviesos diodas
- 2 važiavo šviesos diodais
- 1 schuifschakelaar
- 1 duonos lenta
- 1 potenciometras
- 1 protobordas
- 1 „Guitar Hero“gitara
- Voldoende patalynė
- Materiaal om te solderen/dremelen/
- Schroevendraaier
1 žingsnis: „Componenten Verzamelen“
„Voor ons“prototipas (op breadboard), kurį mes įtraukėme į sudėtines dalis:
6 Mygtukai
7 1 khm rezistoriai
1 Geltonas šviesos diodas
1 mėlynas šviesos diodas
1 „Arduino Uno R3“
1 žalias šviesos diodas
2 Raudonas šviesos diodas
1 Schuifschakelaar
1 Duonos lenta
1 potenciometras
2 žingsnis: „Bouwen“prototipas
Om ons prototype te bouwen hebben we al onze komponenten gebruikt op een breadboard, deze breadboard dient dan als testobject zodat we niet meteen in de behuizing te werk moeten gaan. Išsiųskite prototipą, kurį mes žinosime, atliksime tinklinį tinkerkad.com tinklapį.
Čia yra 5 klavišų spaudimo mygtukai, kuriuos galima naudoti funkciniu būdu, taip pat 5 snaren en een grote pushbutton die in combinatie met één of meerdere 'snaren' moet worden ingedrukt om een auditief effect te krijgen. Įvairios LED lempos, skirtos kasdieniam naudojimui, taip pat visapusiškas valdymas, skirtas įvairiems interaktyviems veiksmams.
3 žingsnis: kodo prototipas
Globale variabelen
In the eerste deel van de code initialiseer je globale variabelen voor de pins van arduino uno waar alle pushbuttons mee verbonden zijn.
// zet PIN numeriai waar mainButton (snaar) en andere mygtukai aan verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int mygtukasPin1 = 2; // nummer van pushbutton1 const int mygtukasPin2 = 3; // nummer van pushbutton2const int mygtukasPin3 = 4; // nummer van pushbutton3const int buttonPin4 = 5; // nummer van pushbutton4const int mygtukasPin5 = 6; // nummer van pushbutton5
Hierna worden er twee arrays aangemaakt voor de namen van de pushbuttons en hun pinnummer.
const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6};
Yra įvairių šviesos diodų lempų kaiščių.
const int ledPin1 = 13; // šviesos diodo kaiščio numeris 13
const int ledPin2 = 12; // LED kaiščio skaičius 12 const int ledPin3 = 11; // LED kaiščio skaičius 11 const int ledPin4 = 10; // LED kaiščio skaičius 10 const int ledPin5 = 9; // LED kaiščio skaičius 9 const int potPin = A5; // šviesos diodo kaiščio A5 skaičius
De laatste globale variabelen dienen als 'state' voor de sensor (zijn de pushbuttons ingedrukt of niet? Potentiometer, lichtsensor).
// inicializavimo mygtukasStates voor de knoppen (ingedrukt of niet) int mainButtonState = 0; int mygtukasStatus1 = 0; int mygtukasStatus2 = 0; int mygtukasBūsena3 = 0; int mygtukasStatus4 = 0; int mygtukasBūsena5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;
Sąranka
Nu volgt de void setup functie. Deze is van het type void (geeft geen waarde terug) ir instrukcijos hierin worden maar 1 keer uitgevoerd.
„Bij elke functie“yra komentaras, kuriame pateikiamas konkretus gedos žodis. Papildoma informacija apie tam tikrą funkciją „concreet doet“yra „te vinden in de arduino“nuoroda
void setup () {// duomenų perdavimo sparta per sekundę (baudas) voor seriele data transmissie Serial.begin (9600); // LEDPin inicijavimas kaip išvesties pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // pradinis visų mygtukų įvestis: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); pinMode (potPin, INPUT); pinMode („LightSensor“, „INPUT“); }
Tuščia funkcija
Na de setup () functie volgt de loop () functie, de instructies die hierin staan gaan herhaald uitgevoerd worden.
void loop () {// lees de staat van de pushbuttons uit (ingedrukt of niet) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);
// ale pushbutton statusen in een array
int buttonStates = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};
// leest de waarde uit van de potentiometer en de lichtsensor
potValue = analogRead (potPin); lightValue = analogRead (lightSensor);
// deklaratorius ir masyvas mainStates en geef die de standaard waarden 0 in.
int mainStates = {0, 0, 0, 0, 0};
// kilpa per masyvą aantalKnoppen
for (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // inicializuoti visus knopPinnen als input digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is, print all knopnamen, alle buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.println (buttonStates ); }}
4 žingsnis: „Uittesten“prototipas
Negalima prototipas gebouwd yra daug modelių, o kodas geschreven yra apdorojamas. Vaizdo įrašas yra ne tik žinomas, bet ir žinomas, kaip reaguoti ir kaip jį valdyti.
„Tweede“vaizdo įraše pateikiamas potencialo matuoklis, naudojamas gitaroje ir apdorojimo procese.
5 žingsnis: „Ontmantelen“„Behuizing“en Kijken Welke Componenten Gebruikt Gaan Worden
Kaip ir teisingą kodo veikimo prototipą, mes pradėjome susitikti su „ontmantelen“van onze Guitar Hero-gitaar. Mes žinome, kad gitaras yra atviras, ir jis turi originalų komponentą. Norėdami tai padaryti, mes paspaudžiame mygtukus, esančius mygtukuose gekregen (zie volgende stap). We hebben de tremolo ook gebruikt voor ons eindproduct en voor onze hoofdbutton (initiële button om als een combinatie af te spelen) hebben we ook de originele twee button gebruikt (zie vierde foto). De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat alle knoppen correct werkten).
6 žingsnis: „Werking Originele“mygtukai + „Dremelen“
Išskirtinis vaizdo įrašas yra tikroviškas, o ne originalus, o ne originalus, o ne originalus.
Om onze eigen buttons te verwerken in de originele knoppen hebben we de binnenkant van de originelen er grotendeels uitgehaald zoals te zien is op de photo.
7 žingsnis: Bedrading Solderen + Buttons Vastlijmen
Omdat we niet meer met een breadboard werken moeten de draden gesoldeerd worden om zo de verschillende komponentai met elkaar te verbinden. Nadat dit gebeurd is kunnen we de buttons vastlijmen zoals te zien is op de photos's. Eens dit gebeurd is kunnen we doorgaan naar de volgende stap.
8 žingsnis: „Plats Maken“De Behuizing
Omdat dit Guitar Hero-model redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. niūrus. Zo hebben we uit de achterkant van de gitaar een hele strook verwijderd zodat er meer plaats ontstaat voor de bedrading in gitaar. Išsamiau apie tai, kas nutiko, bet nesvarbu, ar reikia daugiau informacijos apie tai, ką reikia žinoti, ar ne? Op de vierde en vijfde photo is te zien dat we in de achterkant van de gitaar een doorgang hebben gecreëerd voor de draden die naar de buttons gaan omdat de gitaar anders niet meer te sluiten was. En op de laatste photo is te zien dat we de draden die rechtstreeks verbonden worden met met de Arduino door een gat in de onderkant van de gitaar de behuizing verlaten.
9 žingsnis: „Bedansing Aansluiten Op Protobord“
Om all componentsen met elkaar te verbinden hebben we gebruik gemaakt van een protobord. Tai yra borde datos savybės, skirtos tinklui, skirtam manierai, taip pat ir duonai, maar dan betrouwbaarder ir efektyvumui. We hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde photo. Dit bord is het centrale punt van waaruit al onze verbindingen vertrekken en samenkomen (zie foto 2).
10 žingsnis: „Verstevigen“
Be to, baigiamasis prisilietimas yra verstandig om de losse delen te verstevigen voor extra stabiliteit. Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de buttons verstevigen met stukjes karton.
11 žingsnis: „Code Voor Het Communiceren Met Reaper“
„Deze“kodas yra įvestas „twee delen“, o vėliau - „de arduino IDE“(interaktyvios plėtros aplinka) geschreven. Įdiekite kodo žodį, įkelkite naar arduino zelf ir išmeskite visus stebėtus jutiklius, esančius vidiniame valdiklyje, kad galėtumėte apdoroti.
Apdorojimas atliekamas pagal gedimą. Deze code dient om alles wat arduino doortuurt te ontvangen en door te sturen naar Reaper.
Arduino
/* Šis kodas yra pagrindinis eskizas, skirtas bendrauti su apdorojimu per seriją.
Tai planas, kuriame galite įdėti savo kodą
nurodytas jūsų mygtukams, potenciometrams ar jutikliams.
Jis turi rankos paspaudimą, kad įsitikintume, jog turime kontaktą
ir nuspręsta, kokiu formatu mes bendraujame
Svarbu tą patį pranešimą kurti, kad apdorojimas žinotų, kaip jį dekonstruoti ir siųsti teisingus OSC pranešimus į mūsų DAW
sukurta darbiniam kolektyvui AV&IT
spalio 2017
*
/ sparta
const ilgas baudos greitis = 115200;
// laikas laukti ms tarp apklausų iki kaiščių
const int loopPauseTime = 200; // mili sekundės
// serialiniu būdu išsiųsto pranešimo pradžios ir pabaigos vertės
const String startString = "*", endString = "#";
const char contactCharacter = '|';
// PIN kodai
// kiti globalūs kintamieji
const int aantalKnoppen = 5; const String namenKnoppen [aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen [aantalKnoppen] = {2, 3, 4, 5, 6}; const int mainButton = A1;
int mainButtonState = 0;
int potValue = 0;
// analoginiai jutikliai
const int potPin = A5; // pin voor tremolo
// Ši funkcija mums reikalinga norint užmegzti ryšį su apdorojimo eskizu
// Palikite jį čia void createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // atsiųsti char ir laukti atsakymo… delay (loopPauseTime); } Serial.read (); }
void setup () {
// nustatyti pinModes visiems kaiščiams (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // nekomentuokite, jei naudojate jutiklius, veikiančius ne 5 V, o 3 V įtampa // taip pat turėsite prijungti „išorinį“kaištį prie 3.3 V // analogReference (EXTERNAL);
// inicijuoti serijinius pranešimus
Serial.begin (baudRate); while (! Serial); // laukti rankos paspaudimo nustatytiContact (); }
void loop () {
// 1 ŽINGSNIS: SKAITYTI MYGTUKUS // apklausti visus kaiščius ir susieti rodmenis su atitinkamu intervalu int buttonStates [aantalKnoppen]; /* buttonStates [0] = digitalRead (knopPinnen [0]); buttonStates [1] = digitalRead (knopPinnen [1]); buttonStates [2] = digitalRead (knopPinnen [2]); buttonStates [3] = digitalRead (knopPinnen [3]); buttonStates [4] = digitalRead (knopPinnen [4]); */ mainButtonState = digitalRead (mainButton); for (int i = 0; i <aantalKnoppen; i ++) {buttonStates = digitalRead (knopPinnen ); } potValue = analogRead (potPin); // pavyzdžiai: // float v0 = map (bpm, 0, 1023, 60, 250); // jei norite naudoti normalizuotą plūdę (pvz., tūriui) // float v1 = map (analogRead (pin2), fromMin, fromMax, 0, 100) / 100.0;
// 2 ŽINGSNIS: RAŠYTI PRANEŠIMĄ
Serial.print (startString); // pradėti pranešimų seką (int i = 0; i <aantalKnoppen; i ++) {if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }} else {buttonStates = 0; Serijinis atspaudas (namenKnoppen ); Serial.print (","); Serial.print (buttonStates ); if (i <aantalKnoppen - 1) {Serial.print (","); }}} Serial.print (","); Serial.print („tremolo“); Serial.print (","); Serial.print (žemėlapis (potValue, 0, 1023, 0, 100)); // parašykite pranešimo pabaigą Serial.print (endString);
// palauk truputi..
uždelsimas (loopPauseTime); }
Apdorojimas
Atsakomybės apribojimas: visas eskizo kodo apdorojimo eskizas, esantis geschreven, voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde in bijlage
De volgende instrukcijos moeten aangepast worden (indien nodig):
// Baudrate moet hetzelfde zijn zoals in de arduino eskizas
final int baudRate = 115200;
// Zoek naar het IP adresas pjovimo mašinoje (zie screenshots in bijlage)
// Apdorojamas stuurt naar dit andres en reaper luistert hier naar //
// final String remoteIP = "192.168.1.43"; // pvz. „127.0.0.1“;
final String remoteIP = "10.3.209.60";
// Atkreipkite dėmesį į „sendPort“ir užpildykite tai „Reaper“.
// Tai yra prievadas, į kurį siunčia apdorojimas ir kurio klauso „Reaper“.
galutinis int listenPort = 12000, sendPort = 12000;
// „ListenPort“čia yra aktyviai derinti.
// „PortNames“taip pat yra derinti.
// galutinis eilutės portName = "/dev/ttyACM0";
final String portName = "COM5"; // "/dev/ttyUSB0";
////////////////////// VARTOTOJO PARAMETRŲ PABAIGA //////////////////////// ////
importo apdorojimas.serijinis.*;
importuoti java.util.*;
importuoti oscP5.*;
importuoti netP5.*;
OscP5 oscP5;
„NetAddress myRemoteLocation“;
Serial commsPort; // Serijinis prievadas
loginis pranešimasArrived = false;
Įeinanti eilutė = "", IncomingOSCMessage = "";
final char startChar = '*', endChar = '#'; galutinis char contactCharacter = '|';
// Norėdami įsitikinti, kad siunčiame tik tuos parametrus (reikšmes), kurie keičiasi
// šie visuotiniai kintamieji yra surašyti čia, bet // jų negalima inicijuoti čia! HashMap oldParams, newParams, toSendParams;
// Mums reikia padalinti pranešimą prie kiekvieno kablelio
void processIncoming () {String resVec = gaunamas.skilimas (","); // mes gauname vardo+reikšmių poras // taigi kiekvienam vardui (+2)… pabandykite {dėl (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // įdėti juos į naują hashtable newParams.put (resVec , vertė); }} // jei įvyksta klaida, sugaukime jos rodymą ir išeisime. catch (Exception ex) {println ("Išimties pranešimas:" + ex); printArray (resVec); išeiti (); }}
// Norėdami filtruoti mūsų pranešimus
/ * Mes įsitikiname, kad OSC išėjimo pranešimas yra tik tada, kai * pasikeičia įvesties pranešimas (serijinis) * Tai yra: jei pasuksime/paspausime mygtuką ir jis pakeis vertę. * Taigi mes išfiltruojame gaunamas vertes, kurios iš tikrųjų keičiasi „HashMap“(); for (String key: newParams.keySet ()) {// jei raktas jau yra, jei (oldParams.containsKey (key)) {// raktas yra ir reikšmė nėra ta pati, tada atnaujinkite, jei (! oldParams.get (key).equals (newParams.get (raktas))) {toSendParams.put (raktas, newParams.get (raktas)); }} else {// rakto senuose paramuose nėra, todėl padėkite! toSendParams.put (raktas, newParams.get (raktas)); } oldParams.put (raktas, newParams.get (raktas)); }}
void makeOSC () {
for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (raktas)); / * siųsti pranešimą */ oscP5.send (myMessage, myRemoteLocation); }}
void translateMessage () {
processIncoming (); filterParams (); makeOSC (); } // Kai norime spausdinti į langą void ShowIncoming () {// norėdami pamatyti gaunamą pranešimą, kaip nustatyta „HashMap“tekste („Incoming from Arduino“, 20, 20); int y = 20; for (Stygos raktas: newParams.keySet ()) {y = y+20; tekstas (raktas, 20, y); tekstas (newParams.get (raktas), 300, y); }}
void showOsc () {
tekstas („IncomingOSCMessage“, 300, 200); IncomingOSCMessage = ""; }
void setup () {
dydis (1000, 800); // Scenos dydžio užpildymas (255); fonas (0); oldParams = naujas HashMap (); newParams = naujas „HashMap“(); // printArray (Serial.list ()); commsPort = naujas serijinis (tai, prievado pavadinimas, baudos greitis);
/ * paleiskite oscP5, klausydamiesi gaunamų pranešimų */
oscP5 = naujas OscP5 (tai, klausytisPortas);
/* „myRemoteLocation“yra „NetAddress“. „NetAddress“turi 2 parametrus, * IP adresą ir prievado numerį.„myRemoteLocation“naudojama kaip parametras * oscP5.send () siunčiant osc paketus į kitą kompiuterį, įrenginį, * programą. naudojimą žr. žemiau. bandymo tikslais klausymosi prievadas * ir nuotolinės vietos adreso prievadas yra tas pats, todėl * siųsite pranešimus atgal į šį eskizą. */ myRemoteLocation = naujas NetAddress (remoteIP, sendPort); }
void draw () {
if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }
void serialEvent (Serial commsPort) {
// skaityti baitą iš nuoseklaus prievado: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // prašyti daugiau println ("pradedant …"); pertrauka; atvejis startChar: gaunamas = ""; pertrauka; case endChar: messageArrived = tiesa; // println ("žinutės pabaiga"); pertrauka; numatytasis: gaunamas += inChar; pertrauka; }}
/* gaunamas osc pranešimas persiunčiamas į oscEvent metodą. */
void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // gauti 1 osc argumentą
„IncomingOSCMessage“+= "\ n" +
String.format ("### gavo osc pranešimą:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vertė); println („IncomingOSCMessage“); }
12 žingsnis: valdiklis „Uittesten“
Nu alles yra aangesloten, visas kodas yra geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te latten doen. Žaidimas „Reaper“ir „Guitar Hero MIDI Controller“genitalijų kūrimas yra genialus!
Rekomenduojamas:
Dub Siren Synth - 555 projektas V2: 13 žingsnių (su nuotraukomis)
Dub Siren Synth - 555 Projektas V2: Mano pirmasis dub sirenos kūrimas buvo šiek tiek sudėtingesnis. Nors jis veikė gerai, jums reikėjo 3 x 9 V baterijų, kad jį maitintumėte, o tai buvo per daug, ir aš turėjau sukurti pagrindinę grandinę ant prototipo plokštės. Pirmasis vaizdo įrašas yra garsų, kuriuos jūs
Lanko reaktorius „La Smogdog“, labai asmeniškas projektas…: 13 žingsnių (su nuotraukomis)
„Arc Reactor a La Smogdog“, labai asmeniškas projektas…: Ką aš turiu bendro su šiais dviem vaikinais? Šį kartą tai ne barzda! Visi turime skylę krūtinėje, o aš ir Leo gimėme su Pectus Excavatum, Starkas turėjo uždirbti savo :-) Pectus Excavatum yra (ieškokite čia: https: // lt .wikipedia.org/wik
Lengvesnis „Guitar Hero Clone Controller“!: 10 žingsnių (su nuotraukomis)
Lengvesnis „Guitar Hero Clone Controller“!: Tai įkvėpė puiki „Realities“idėja, tačiau aš naudoju kompiuterio valdiklį, o ne klaviatūros plokštę, todėl nebereikia sudėtingo „flipper“kūrimo
2 projektas: kaip pakeisti inžineriją: 11 žingsnių (su nuotraukomis)
2 projektas: kaip pakeisti inžineriją: Sveiki, kolegos mėgėjai, geras mano draugas kartu su „Raspberry Pi“sudėjo kelis komponentus, kad iššifruotų RS232 protokolą į TTL. Galutinis rezultatas buvo sumestas į dėžę, kurioje buvo 3 pagrindiniai komponentai: galios keitiklis į maitinimą
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): 3 žingsniai
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): NEDARYKITE ŠIO NAUDOTI USB! iš visų komentarų sužinojau, kad tai gali pakenkti jūsų kompiuteriui. mano kompiuteris gerai. Naudokite 600 mA 5v telefono įkroviklį. Aš tai naudoju ir jis veikia gerai, ir niekas negali būti sugadintas, jei naudosite apsauginį kištuką, kad sustabdytumėte maitinimą