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

Minimale MIDI-drumkit met 3D-printer

Componenten en benodigdheden

Arduino UNO
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
× 1
SparkFun Piezo
× 1
Adafruit Force Sensitive Resistor (FSR)
× 1
Weerstand 10k ohm
× 1
Weerstand 1M ohm
× 1
SparkFun Zener Diode - 5.1V 1W
× 1
SparkFun Drukknopschakelaar 12 mm
× 1
Schuifschakelaar
× 1
TRS-aansluiting
× 1
USB-A naar B-kabel
× 1
Apple Lightning-naar-USB-camera-adapter
× 1

Benodigde gereedschappen en machines

3D-printer (algemeen)
Lasersnijder (algemeen)
niet nodig,extra
Soldeerbout (algemeen)
cirkelsnijder

Apps en online services

Arduino IDE

Over dit project

Hallo.

Dit is een minimale drumkit die arduino UNO gebruikt.

Controleer allereerst deze instructables-pagina.

https://blog.arduino.cc/2017/01/19/a-3d-printed-e-drum-pad/

Sinds ik dit begon te maken, was ik gefascineerd door piëzo en elektronische drums.

Ik was gefascineerd door een heel eenvoudig mechanisme van elektronische drums en de geweldige uitvinding genaamd MIDI.

Met andere woorden, ik kon niet tevreden zijn door alleen maar pads te maken.

Dit drumstel is grofweg verdeeld in twee producties.

1.Pad gemaakt met een 3D-printer en dik papier.

2.Trigger midi-converter met arduino UNO.

Het signaal dat wordt verzonden vanaf de pad van "1" wordt verwerkt door arduino van "2" en omgezet in MIDI-signaal. En het MIDI-signaal wordt verzonden van arduino naar iPhone, laptop, enz. en er komt geluid uit.

U hoeft geen andere voeding voor te bereiden dan een smartphone of pc.

Wat heb je nodig

Hulpprogramma's

・3D-printer

・Lasersnijder (Extra)

・inbussleutel

・snijmes

・cirkelsnijder

・Soldeerbout

Pijpsnijder

・driver boor

・boor 9mm / 10mm

Materiaal

・1 mm dik papier

・PLA-filament

・Sponsschuimplaten 5 mm / 10 mm

・MDF 2,5 mm / 5,5 mm (extra)

・M6 - 70 mm bout en moeren

・M6 - 50 mm bout en moeren

・M3 - 10 mm bout en moeren

・M3 - 15 mm bout en moeren

・M3 - 25 mm bout en moeren

・M2 schroef

・13 mm diameter RVS buis

Drumhardware

・Meshkop 10 inch / 8 inch

・Snarestandaard (Alles is in orde. Ik gebruik YAMAHA SS662.)

・Hi-hatstandaard (Alles is in orde. Ik gebruik YAMAHA HS650A)

・Kickpedaal (Alles is in orde. Ik gebruik YAMAHA FP7210A)

・Drumstok

Stap 1:3D-printen

Alle gegevens staan ​​op Thingiverse en GitHub.

Gebruik versie 2 voor de velg.

Ik heb onderdelen geprint met infill op 20%. De dikte van de laag is 0,3 mm.

U kunt ook een lasersnijder gebruiken om een ​​pad te maken.

https://github.com/RyoKosaka/drums/tree/master/vector

Stap 2:Montage

Gebruik M3-10mm bouten en moeren om de onderdelen met elkaar te verbinden.

Gebruik de M3-15 mm of M3-25 mm bouten voor het middelste deel om het onderste deel aan elkaar te bevestigen.

Stap 3:Shell maken

Ten eerste is de hoogte van de schaal 55 mm.

Maak drie banden met een breedte van 55 mm.

De lengte is iets langer dan de lengte die de pad bedekt.

Aangezien er een opening aan de onderkant is, probeer dan een band in die opening te steken.

Knip de band zo af dat deze de perfecte cirkellengte heeft.

Herhaal dit 3 keer en bedek het met lijm.

Wanneer de schaal droogt, met de gaaskop vast, maak je een gat met een diameter van 9 mm voor de mof.

Je kunt vleugelmoeren gebruiken, maar ik heb ook stemsleutels gemaakt die zelfs met gewone moeren kunnen worden vastgedraaid, dus gebruik ze vooral.

Gebruik voor het bevestigen van de gaaskop M6-70 mm bouten.

Zodra je een gat hebt gemaakt, verwijder je de gaaskop weer om een ​​piëzo te plaatsen

Stap 4:Piezo bevestigen

SNARE

Gebruik in het geval van een snare twee piëzo zoals op de afbeelding.

Sluit de rode kabel van de piëzo aan op de punt en de ring.

Beide zwarte kabels worden aangesloten op de huls.

Vergeet bij het solderen niet de kabels door de gaten in de sensorplaat te halen.

Piëzo voor het hoofd (piëzo verbonden met punt) moet worden ingeklemd met 10 mm dik sponsschuim, zoals weergegeven op de afbeelding.

Een onder, drie boven. En maak de top 3 kegels zoals op de foto.

Plaats het dan op de sensorplaat.

KICK

Aangezien de kickpad slechts één piëzo gebruikt, kan alleen de tip worden gebruikt.

Er is geen sensorplaat nodig. Twee sponsschuimen onder de piëzo

Plaats de sensor offset vanuit het midden.

Het is omdat arduino de slagkracht niet kan beoordelen als de klopper de sensor rechtstreeks raakt.

HI-HAT

Het circuit is hetzelfde als de kickpad.

Leg een stuk sponsschuim van 10 mm dik onder de piëzo.

Piezo is delicaat. Pas op dat u niet buigt of pijn doet.

Stap 5:10 inch snarepad

Bevestig eerst de sensor voor de velg.

Bevestig de sensorplaat. Bevestig het stevig. Maak het uiteinde van de kegel 2-3 mm zichtbaar vanaf de zijkant.

Natuurlijk wordt dezelfde procedure ook gebruikt bij gebruik van een 8-inch pad als snare.

Stap 6:8 inch Kick PAD

Snijd eerst een roestvrijstalen buis met een diameter van 13 mm.

Maak twee 200 mm en twee 365 mm.

Omdat de lengte kan worden aangepast, zelfs als er een fout in de lengte zit, is het OK.

Monteer ze aan de hand van afbeeldingen.

Om de buis te bevestigen, is deze zo ontworpen dat de M3-moer in het onderdeel kan worden geplaatst.

Zet de pijp stevig vast. Gebruik M3-15 mm bouten en moeren.

Stap 7:12 inch Hi-Hat

Nadat ik de ketel met dik papier had gemaakt, dacht ik dat als je dik papier gebruikt, ik bekkens kan maken.

Eerste. Snijd dik papier tot een cirkel met een diameter van 300 mm. Maak er drie van.

Maak vervolgens een inkeping vanuit het midden.

Ten slotte wordt een tweede inkeping gemaakt vanaf het punt 10 mm parallel aan de eerste inkeping.

Zo ontstaan ​​drie pac-mans met een kleine mond open.

Sluit vervolgens de mond van de Pac Man voorzichtig af met tape om er een bekkenvorm van te maken.

Breng lijm aan en bedek deze.Vergeet niet de lijm netjes en dun aan te brengen

Houd stevig vast met je handen, plaats het gewicht er rond en droog.

Plaats voor het dempen een 5 mm dikke spons en boor een gat. Je kunt het gat niet netjes openen, maar je kunt het gat verbergen, dus het is goed.

Compleet door sensorbevestiging en kabelgeleider te bevestigen met dubbelzijdig plakband. Het is misschien makkelijker als je een lijmpistool gebruikt.

Stap 8:Hi-Hat-controller

Hi-Hat Controller stuurt het openen en sluiten van de hi-hat naar Arduino.

De schakeling is heel eenvoudig.

Het wordt gemaakt door drie delen te combineren.

Bevestig de FSR aan het onderste deel en bevestig de socket. FSR kan zelfs worden gebruikt als er een gat is geopend.

Bevestig een spons van 10 mm aan de FSR als een foto.

Bevestig het deksel met M3 - 10 mm bouten.

Ook al is het alleen HOOG en LAAG, je kunt je afvragen waarom ik FSR heb gebruikt.

Ik gebruik FSR om te corresponderen met geluidsmodules zoals Roland en Yamaha.

En in de geluidsbron exclusief voor drums zoals EZ DRUMMER 2, zijn er verschillende stadia in de mate van opening van de hi-hat.

Als het FSR is, is het misschien mogelijk om te reageren door alleen de code aan te passen. Ik heb het echter niet geprobeerd.

Stap 9:USB - MIDI

Wat kunnen we in deze stap doen?

Met alleen een USB-kabel kun je een midi-signaal van Arduino sturen.

Met andere woorden, zorg ervoor dat arduino door iPhone enz. wordt herkend als een midi-apparaat zonder extra hardware.

Bekijk eerst deze pagina.

http://morecatlab.akiba.coocan.jp/lab/index.php/aruino/midi-firmware-for-arduino-uno-moco/

https://github.com/kuwaday/mocolufa

Als je de normale arduino UNO rechtstreeks op de iPhone aansluit, krijg je een foutmelding als "Arduino UNO is niet compatibel".

Je moet dus de USB-chip (ATmega16U2) die in Arduino UNO wordt gebruikt, herschrijven.

https://www.arduino.cc/en/Hacking/DFUProgramming8U2

Deze instructie is hoe het hex-bestand te herschrijven.

Ga verder volgens deze site tot de onderstaande beschrijving.

sudo dfu-programmer atmega16u2 flash Arduino-usbserial-uno.hex

Vervang gewoon "Arduino-usbserial-uno.hex" door "dualMoco.hex".

Daarom,

sudo dfu-programmer atmega16u2 flash dualMoco.hex

Na het herschrijven wordt je Arduino herkend als een MIDI-apparaat.

Als je de pin kortsluit zoals op de afbeelding wordt getoond, wordt deze herkend als een normale Arduino.

Als dit niet het geval is (indien niet kortgesloten), wordt Arduino UNO herkend als een MIDI-apparaat.

Met andere woorden, wanneer u code schrijft met behulp van de arduino IDE, moet u de pinnen kortsluiten zoals weergegeven in de afbeelding.

Stap 10:Trigger naar MIDI-converter

Er zit arduino UNO en schild in de doos.

Raadpleeg de afbeelding van fritzing voor het circuit van het schild.

Diodes zijn voor bescherming, maar ik zag de informatie dat arduino UNO een beveiligingscircuit heeft, diodes zijn misschien niet nodig. Weet iemand hiervan?

Nadat je eerst het model van de behuizing en de hoes hebt afgedrukt, is het goed om het schild daarop te maken.

Er is ook een 3D-model van de hoes, maar ik heb een hoes gemaakt met een lasercutter. Kies wat je wilt.

Stap 11:Spelen met GarageBand

Start gewoon garageband en maak verbinding. Er is geen bijzonder moeilijke instelling.

Er zijn een aantal DAW's voor pc's die op deze drumset kunnen worden gebruikt, waaronder GarageBand.

Onder hen is waterstof gratis en kun je geluid toevoegen.

Stap 12:Instelling

Bij het maken van de code was het lastig om de code telkens te herschrijven als de waarde veranderde, dus ik wilde de waarde alleen met arduino kunnen veranderen.

Met andere woorden, dit is gemaakt voor het debuggen van code, dus er zijn items die niet hoeven te worden gewijzigd.

Desalniettemin is instelling noodzakelijk afhankelijk van de grootte van de piëzo, de grootte van de pad, de hardheid van het sponsschuim.

Selecteer een instrument met de INC / DEC-knop en selecteer het instellingsitem met de NEXT / BACK-knop. Wanneer de EDIT-knop wordt ingedrukt terwijl de instrumenten en items die u wilt instellen worden weergegeven, kunt u de waarde wijzigen met de INC / DEC-knop. Druk vervolgens nogmaals op de EDIT-knop om de wijziging te bevestigen.

Als u naar het laatste deel van de video kijkt, begrijpt u hoe u moet werken.

DREMPEL

De laagste waarde waarbij geluid uitkomt

GEVOELIGHEID

Sensorgevoeligheid. Als je hem verlaagt, krijg je een hoge snelheid, zelfs als je zachtjes slaat.

OPMERKING

Nummer van de notitie. Door te veranderen, kun je van instrument veranderen. Raadpleeg de afbeelding.

VLAG

Een waarde om te beoordelen dat het pak slaag voorbij is. Je hoeft het niet te veel te veranderen. Het zou leuk zijn om de waarde in te stellen van 1 tot 10. Als je de waarde te veel verhoogt, krijg je twee keer een geluid met een enkele slag. Als u het te veel verlaagt, kan het geluid uitvallen als u herhaaldelijk slaat.

SCANTIJD

Bij het zoeken naar pieken worden waarden achter elkaar genomen gedurende enkele milliseconden na het overschrijden van de drempel. De hoogste waarde onder hen zal pieken. Deze enkele milliseconden is SCANTIME. Het is niet nodig om het te veranderen.

HEAD / RIM

Stel het gemak van de velg in. Door het omhoog te brengen, wordt het moeilijk om te klinken. Als u het te hard laat zakken, klinkt de rand wanneer u het hoofd raakt. Wat betreft de beoordeling van het hoofd en de rand, kan het nodig zijn om de code te verbeteren

PEDAAL VELO

In tegenstelling tot andere pads is de snelheid van het pedaal constant. De beginwaarde is 100. Wijzig a.u.b. uw favoriete waarde.

MASKERTIJD

Dit is een waarde gerelateerd aan FLAG. Het is niet nodig om het te veranderen. Als je hem verhoogt, hoor je mogelijk geen geluid als je continu slaat.

Stap 13:Fusion 360

Sommige onderdelen zijn mogelijk niet bruikbaar, tenzij hun afmetingen worden gewijzigd. Het is moeilijk om STL-gegevens te bewerken. Dus ik heb fusion 360-gegevens geüpload. Omdat ik echter met vallen en opstaan ​​gegevens aan het bewerken ben, is het beter om niet te veel afhankelijk te zijn van de geschiedenisfunctie.

https://github.com/RyoKosaka/drums/tree/master/Fusion360

EXTRA

Extra stappen zijn op instructables.

https://www.instructables.com/id/Arduino-Minimal-Drum-Kit/

En een gedetailleerd productieproces wordt op deze blog gepubliceerd.

Check het als je interesse hebt.

Aarzel niet om iets te vragen.

Veel plezier!

Code

  • Hallo Drum v2
Hallo Drum v2Arduino
Gewijzigd:05/12/2019 door George Brotherston
/* Drum MIDI-controller Gemaakt:28/06/2017 door Ryo Kosaka als "HELLO DRUM" Ver.1.0 Gewijzigd:05/12/2019 door George Brotherston*/// Bibliotheek omvat// #include  // Arduino-bibliotheek (automatisch inbegrepen) // LOW (regel 41) // HIGH (regel 40) // INPUT_PULLUP (regel 47) // digitalRead() (regel 177) / / analogRead() (regel 178) #include  // MIDI-bibliotheek - Versie:4.3.1 // omvat  // class MIDI (Line 30) // class method 'begin' (Line 55) #include  // LiquidCrystal - Versie:1.0.7 // lcd-object geïnstantieerd (in het gedeelte Variabelen hieronder) van de LiquidCrystal-klasse (regel 45)// Variabelen - Declareren en initialiseren // Variabelen - Boolean programmeren bSnareFlag =onwaar; boolean bHihatFlag =false; boolean bKickFlag =false; boolean bPedalFlag =false; booleaans bButtonState =waar; booleaans bButtonState_set =waar; int iUPDOWN =0; int iNEXTBACK =0; // Arrays - Programma // InstrumentSensor[6] ={threshold, gevoeligheid, noot, vlag, snelheid, iPeakValue} // 'iPeakValue' en 'velocity' moeten nul zijn voor alle InstrumentSensor-arrays // Alle 'aHIHAT[]' en 'aHIHAT_CLOSE[]' array-elementen moeten dezelfde waarde hebben, behalve het 'note'-element. int aSNARE[6] ={150, 950, 38, 3, 0, 0}; int aSNARE_RIM[6] ={5, 500, 37, 3 , 0, 0}; int aHIHAT[6] ={100, 800, 46, 1, 0, 0}; int aHIHAT_CLOSE[6] ={100, 800, 42, 1, 0, 0}; int aKICK[6] ={200, 700, 36, 1, 0, 0}; // Instrument_ContinuousController[4] ={scantime, snare/rim, pedalVelocity, masktime} int aHIHAT_PEDAL[4] ={600, 0, 44, 0}; // InstrumentSensor_ParameterValue [4] ={drempel, gevoeligheid, opmerking, vlag} int aSETTING [4] ={4, 500, 100,1}; // Bibliotheken // LiquidCrystal.h // Constanten (reeds gedefinieerd in Bibliotheek, nog steeds binnen bereik? Zo niet, definieer dan hieronder) // const int rs =12, en =11, d4 =5, d5 =4, d6 =3 , d7 =2; // lcd-object geïnstantieerd uit de LiquidCrystal-klasse (LiquidCrystal.h Line 45) LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // Koppel de pinnen van de LCD-interface aan het bijbehorende Arduino-pinnummer // MIDI.h // Initialiseer de bibliotheek MIDI_CREATE_DEFAULT_INSTANCE();// Programmacode // Programma-uitvoering - Initial (programma-setup) void setup() { MIDI.begin (10); // begin (MIDI.h Line 55) lcd.begin (16, 2); // begin (LiquidCrystal.h Line 62) lcd.print ("INITIALISEREN..."); // print (LiquidCrystal.h Line 45) lcd.setCursor (0, 1); // setCursor (LiquidCrystal.h Line 82) lcd.print ("DRUM MIDI CONTROLLER"); pinMode (6, INPUT_PULLUP); // pinMode (Arduino.h Line 175); INPUT_PULLUP (Arduino.h Lijn 47) pinMode (7, INPUT_PULLUP); pinMode (8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode (10, INPUT_PULLUP); } // Programma-uitvoering - Steadystate (continue lus totdat de stroom uitvalt) void loop () { // Drum MIDI-controllercircuit // Declareer en initialiseer variabelen int iButton_set =digitalRead (6); // Set Button // digitalRead () (Arduino.h Line 177) int iButton_up =digitalRead (7); // Omhoog-knop int iButton_down =digitalRead (8); // Omlaag-knop int iButton_next =digitalRead (9); // Volgende knop int iButton_back =digitalRead (10); // Terug-knop int iPiezoValue_A0 =analogRead (A0); // Piezo - Snare Head // analogRead () (Arduino.h Line 178) int iPiezoValue_A1 =analogRead (A1); // Piezo - Snare Rim int iPiezoValue_A2 =analogRead (A2); // Hi-hat int iPiezoValue_A3 =analogRead (A3); // Kick Drum int iFSRValue_A4 =analogRead (A4); // Hi-hatpedaal // Bewerkingsmodus int aUP[4] ={5, 50, 1,1}; // {drempel, gevoeligheid, opmerking, vlag} int aUP_ADVANCE [4] ={1, 50, 1,1}; // {scantime, rim/head, pedal velocity, masktime} // Opmerking:aINSTRUMENT[] array is niet gedeclareerd in 'Arrays' hierboven char* aINSTRUMENT[] ={ "SNARE HEAD", "SNARE RIM", "HIHAT OPEN ", "HIHAT CLOSE", "HIHAT-PEDAAL", "KICK", "GEAVANCEERDE INSTELLING"}; // Opmerking:aSETTING[] array WAS gedeclareerd in 'Arrays' hierboven char* aSETTING[] ={ "THRESHOLD", "SENSITIVITY", "NOTE", "FLAG" }; // Opmerking:aSETTING_ADVANCE[] is niet gedeclareerd in 'Arrays' hierboven char* aSETTING_ADVANCE[] ={ "SCAN TIME", "HEAD / RIM ","PEDAL VELO", "MASK TIME" }; als (iUPDOWN <0) { iUPDOWN =6; } if (iUPDOWN> 6) { iUPDOWN =0; } if (iNEXTBACK <0) { iNEXTBACK =3; } if (iNEXTBACK> 3) { iNEXTBACK =0; } // Drukknop EDIT // LAAG (Arduino.h Line 41) if (iButton_set ==LAAG &&bButtonState ==true &&bButtonState_set ==true) { lcd.clear(); lcd.print("BEWERKEN"); bButtonState =onwaar; bButtonState_set =onwaar; vertraging (500); } if (iButton_set ==LAAG &&bButtonState ==true &&bButtonState_set ==false) { lcd.clear(); lcd.print("BEWERKEN GEDAAN"); bButtonState =onwaar; bButtonState_set =waar; vertraging (500); } if (iButton_up ==LAAG &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] + aUP[iNEXTBACK]; pauze; geval 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] + aUP[iNEXTBACK]; pauze; geval 2:schakel (iNEXTBACK) { geval 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; pauze; standaard:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } pauze; geval 3:schakel (iNEXTBACK) { geval 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; pauze; standaard:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] + aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] + aUP[iNEXTBACK]; } pauze; geval 4:schakel (iNEXTBACK) { geval 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; pauze; geval 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] + aUP[iNEXTBACK]; pauze; } pauze; geval 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] + aUP[iNEXTBACK]; pauze; geval 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] + aUP_ADVANCE[iNEXTBACK]; pauze; } bButtonState =onwaar; vertraging (30); } if (iButton_down ==LAAG &&bButtonState ==true &&bButtonState_set ==false) { switch (iUPDOWN) { case 0:aSNARE[iNEXTBACK] =aSNARE[iNEXTBACK] - aUP[iNEXTBACK]; pauze; geval 1:aSNARE_RIM[iNEXTBACK] =aSNARE_RIM[iNEXTBACK] - aUP[iNEXTBACK]; pauze; case 2:switch (iNEXTBACK) { case 2:aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; pauze; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } pauze; case 3:switch (iNEXTBACK) { case 2:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; pauze; default:aHIHAT_CLOSE[iNEXTBACK] =aHIHAT_CLOSE[iNEXTBACK] - aUP[iNEXTBACK]; aHIHAT[iNEXTBACK] =aHIHAT[iNEXTBACK] - aUP[iNEXTBACK]; } pauze; case 4:switch (iNEXTBACK) { case 0:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; pauze; case 2:aHIHAT_PEDAL[iNEXTBACK] =aHIHAT_PEDAL[iNEXTBACK] - aUP[iNEXTBACK]; pauze; } pauze; case 5:aKICK[iNEXTBACK] =aKICK[iNEXTBACK] - aUP[iNEXTBACK]; pauze; case 6:aSETTING[iNEXTBACK] =aSETTING[iNEXTBACK] - aUP_ADVANCE[iNEXTBACK]; pauze; } bButtonState =false; delay(30); } // Pushbuttons UP; DOWN; NEXT; BACK if (iButton_up ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iUPDOWN =++iUPDOWN; bButtonState =false; delay(30); } if (iButton_down ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iUPDOWN =--iUPDOWN; bButtonState =false; delay(30); } if (iButton_next ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iNEXTBACK =++iNEXTBACK; bButtonState =false; delay(30); } if (iButton_back ==LOW &&bButtonState ==true &&bButtonState_set ==true) { iNEXTBACK =--iNEXTBACK; bButtonState =false; delay(30); } if (bButtonState ==false &&iButton_up ==HIGH &&iButton_down ==HIGH &&iButton_next ==HIGH &&iButton_back ==HIGH &&iButton_set ==HIGH) { // HIGH is defined in Arduino.h Line 40 switch (iUPDOWN) { case 0:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE[iNEXTBACK]); pauze; case 1:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSNARE_RIM[iNEXTBACK]); pauze; case 2:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT[iNEXTBACK]); pauze; case 3:lcd.clear();lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_CLOSE[iNEXTBACK]); pauze; case 4:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aHIHAT_PEDAL[iNEXTBACK]); pauze; case 5:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aKICK[iNEXTBACK]); pauze; case 6:lcd.clear(); lcd.print(aINSTRUMENT[iUPDOWN]); lcd.setCursor(0, 1); lcd.print(aSETTING_ADVANCE[iNEXTBACK]); lcd.setCursor(12, 1); lcd.print(aSETTING[iNEXTBACK]); pauze; } bButtonState =true; } // Instrument Sensors // Snare Drum if (iPiezoValue_A0> aSNARE[0] &&bSnareFlag ==false) { for (int i =0; i  aSNARE[4]) { aSNARE[4] =iPeak_A0; } if (iPeak_A1> aSNARE_RIM[4]) { aSNARE_RIM[4] =iPeak_A1; } } aSNARE[5] =aSNARE[4]; aSNARE_RIM[5] =aSNARE_RIM[4]; aSNARE[4] =map(aSNARE[4], aSNARE[0], aSNARE[1], 0, 127); aSNARE_RIM[4] =map(aSNARE_RIM[4], aSNARE_RIM[0], aSNARE_RIM[1], 0, 127); aSNARE[4] =(aSNARE[4] * aSNARE[4]) / 127; // Curve setting //aSNARE_RIM[4] =(aSNARE_RIM[4] * aSNARE_RIM[4]) / 127; if (aSNARE[4] <=1) { aSNARE[4] =1; } if (aSNARE[4]> 127) { aSNARE[4] =127; } if (aSNARE_RIM[4] <=0) { aSNARE_RIM[4] =0; } if (aSNARE_RIM[4]> 127) { aSNARE_RIM[4] =127; } if (aSNARE_RIM[5]> aSETTING[1]) { MIDI.sendNoteOn(aSNARE_RIM[2], aSNARE_RIM[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE_RIM[2], 0, 1); lcd.wissen(); lcd.print("SNARE RIM"); lcd.setCursor(0, 1); lcd.print(aSNARE_RIM[4]); bSnareFlag =true; } //else if (aSNARE[5]> aSNARE_RIM[5]) else { MIDI.sendNoteOn(aSNARE[2], aSNARE[4], 1); //(note, velocity, channel) MIDI.sendNoteOn(aSNARE[2], 0, 1); lcd.wissen(); lcd.print("SNARE HEAD"); lcd.setCursor(0, 1); lcd.print(aSNARE[4]); //lcd.setCursor(10, 1); //lcd.print(aSNARE_RIM[5]); bSnareFlag =true; } } // Hi-Hat Cymbal if (iPiezoValue_A2> aHIHAT[0] &&bHihatFlag ==false) { for (int i =0; i  aHIHAT[4]) { aHIHAT[4] =iPeak_A2; } } aHIHAT[5] =aHIHAT[4]; aHIHAT[4] =map(aHIHAT[4], aHIHAT[0], aHIHAT[1], 0, 127); aHIHAT[4] =(aHIHAT[4] * aHIHAT[4]) / 127; if (aHIHAT[4] <=1) { aHIHAT[4] =1; } if (aHIHAT[4]> 127) { aHIHAT[4] =127; } if (iPiezoValue_A0 =aHIHAT_PEDAL[0]) { MIDI.sendNoteOn(aHIHAT_CLOSE[2], aHIHAT[4], 1); MIDI.sendNoteOn(aHIHAT_CLOSE[2], 0, 1); lcd.wissen(); lcd.print("HIHAT CLOSE"); lcd.setCursor(0, 1); lcd.print(aHIHAT[4]); bHihatFlag =true; } } // Hi-hat Pedal if (iPiezoValue_A0> aHIHAT_PEDAL[0] &&bPedalFlag ==false) { MIDI.sendNoteOn(aHIHAT_PEDAL[2], aSETTING[2], 1); // (note, velocity, channel) MIDI.sendNoteOn(aHIHAT_PEDAL[2], 0, 1); lcd.wissen(); lcd.print("HIHAT PEDAL"); lcd.setCursor(0, 1); lcd.print(aSETTING[2]); bPedalFlag =true; } // Kick Drum if (iPiezoValue_A3> aKICK[0] &&bKickFlag ==false) { for (int i =0; i  aKICK[4]) { aKICK[4] =iPeak_A3; } } aKICK[5] =aKICK[4]; aKICK[4] =map(aKICK[4], aKICK[0], aKICK[1], 0, 127); aKICK[4] =(aKICK[4] * aKICK[4]) / 127; if (aKICK[4] <=1) { aKICK[4] =1; } if (aKICK[4]> 127) { aKICK[4] =127; } MIDI.sendNoteOn(aKICK[2], aKICK[4], 1); MIDI.sendNoteOn(aKICK[2], 0, 1); lcd.wissen(); lcd.print("KICK"); lcd.setCursor(0, 1); lcd.print(aKICK[4]); bKickFlag =true; }// --- BEGIN 'Code in Progress' --- //// --- I could be wrong, but this is what it appears to be --- and out of curiousity what is purpose of this sequence? -- // // I=(A0); // Previous Code // -- DOES iSensorValue_A0 need to be declared as an integer? How does this relate to iPiezoValue_A0? -- // if (iSensorValue_A0 <(aSNARE[5] * (0.01 * aSNARE[3]))) { bSnareFlag =false; } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&iPiezoValue_A2 <(aHIHAT[5] * (0.01 * aHIHAT[3])) &&bHihatFlag ==true) { delay(aSETTING[3]); // iSensorValue_A1 is reading analogRead(A2), but this is aHIHAT_PEDAL (which is analogRead(A2) int iSensorValue_A1 =analogRead(A2); if (iSensorValue_A1 <(aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag =false; } } if (iPiezoValue_A0>=aHIHAT_PEDAL[0] &&iPiezoValue_A2 <(aHIHAT[5] *(0.01 * aHIHAT[3])) &&bHihatFlag ==true) { delay(aSETTING[3]); int iSensorValue_A2 =analogRead(A2); if (iSensorValue_A2 <(aHIHAT[5] * (0.01 * aHIHAT[3]))) { bHihatFlag =false; } } if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3])) &&bKickFlag ==true) { delay(aSETTING[3]); // -- Should declared iSensorValue_A3 be iPiezoValue_A3? iSensorValue_A3 is declared but not used anywhere?? int iSensorValue_A3 =analogRead(A3); if (iPiezoValue_A3 <(aKICK[5] * (0.01 * aKICK[3]))) { bKickFlag =false; } } if (iPiezoValue_A0 <=aHIHAT_PEDAL[0] &&bPedalFlag ==true) { bPedalFlag =false; }// --- END 'Code in Progress' --- // }
Hello Drum

Schema's

circuit_nZotR7rJMM.fzz

Productieproces

  1. Drum
  2. Chinese chirurgen maken titanium botten met een 3D-printer
  3. Ontwerpkit meet bloeddruk met optische sensor
  4. Hoe u GrabCAD Print verbindt met uw Stratasys 3D-printer
  5. Wat kunt u maken met een 3D-printer?
  6. Gyroscoopplezier met NeoPixel Ring
  7. Cloud-kostuum
  8. Unopad - Arduino MIDI-controller met Ableton
  9. Eenvoudige obstakelsensor met Arduino
  10. Spraakherkenning en synthese met Arduino
  11. Externe S-Meter op Icom-radio's met CI-V-poort