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

Arduino MIDI Stepper Synth

Componenten en benodigdheden

Arduino UNO
Je kunt elke vergelijkbare Arduino gebruiken om de IO uit te breiden.
× 1
A4988 Stepper-stuurprogramma
× 4
Arduino CNC Shield V3
Optioneel, u kunt de A4988-stuurprogramma's gewoon handmatig aansluiten
× 1
12V 6A voeding
Of vergelijkbaar om de stappenmotoren aan te drijven
× 1
OpenBuilds NEMA 17 stappenmotor
× 4

Benodigde gereedschappen en machines

3D-printer (algemeen)
Volledig optioneel!

Over dit project

Bekijk het hier in actie.

Ik deed mijn gebruikelijke, surfen op YouTube toen ik wat floppy drive-muziek zag. Omdat ik wist dat diskettestations worden bestuurd door stappenmotoren, besloot ik mijn eigen stappenmotorgeluidsgenerator te maken.

Ik had gezien dat mensen dit eerder hadden gedaan, maar elke instantie had de code niet gedeeld of hun code was zeer gebrekkig en/of beperkt.

Nadat ik op school C++ had geleerd, besloot ik mijn vaardigheden in te zetten.

Wat ik echt wilde doen, was een code maken die eenvoudig en gemakkelijk te gebruiken en aan te passen was. En dat is precies wat ik deed!

De Algemeen Proces

Om te beginnen bedacht ik wat er moest gebeuren. In de meest basale bewoordingen moest ik MIDI-gegevens extraheren en deze omzetten in een snelheid die ervoor zorgde dat een stappenmotor de bijbehorende toonhoogte creëerde.

MIDI-gegevens extraheren

Dit deel was vrij eenvoudig. Door de MIDI-bibliotheek te gebruiken, kon ik de MIDI-gegevens interpreteren en naar een andere functie sturen om de snelheid te regelen.

De steppers besturen

De A4988-stappenmotordrivers hebben twee pinnen die de stappenmotor direct regelen; STAP en DIR. DIR bepaalt of de motor met de klok mee of tegen de klok in draait, afhankelijk van de staat, en STEP verplaatst de stepper één stap elke keer dat deze hoog wordt getrokken (hoeveel hangt af van de microstepping-resolutie). Omdat het geluid niet wordt beïnvloed door de richting, stel ik het gewoon zo laag in (of sluit het gewoon aan op aarde). Nu kan ik gewoon de motor starten met een digitalWrite-opdracht.

De uitdaging

De grootste uitdaging bij het omgaan met dit project was dat ik meerdere stappenmotoren tegelijk wilde aansturen, dus het gebruik van een delay()-opdracht was uitgesloten (anders zouden de motoren niet tegelijkertijd draaien). In plaats daarvan heb ik de opdracht micros() gebruikt om de duur te berekenen om de steppers te pulseren. Omdat er voor elke stappenmotor verschillende snelheidswaarden zullen zijn, heb ik de snelheidsvariabelen in arrays veranderd, waarbij hun index overeenkomt met het motornummer en het MIDI-kanaal. Ik gebruikte oorspronkelijk het millis()-commando, maar ontdekte dat het geen resolutie had om verschillende toonhoogtes te produceren.

Door een array te gebruiken om de snelheid van de stappenmotoren te regelen, kon ik een enkele variabele voor alle motoren gebruiken, en dit geeft de mogelijkheid om de Arduino een willekeurig aantal steppers te laten besturen, gewoon door de arraygrootte te wijzigen!

Snelheidsberekeningen

In een test stuurde ik een blokgolf van 440 Hz (met behulp van het tooncommando) naar de stappen en ontdekte dat de stappenmotor een A440-pitch creëerde. Omdat de snelheidswaarde die naar de stepper-functie werd gestuurd de periode in microseconden was, heb ik de nootfrequenties eenvoudig omgerekend naar de periode. Ik plaats deze waarden in een andere array met de naam pitchValues, waarbij hun index overeenkomt met de MIDI-nootwaarde. Door de array te gebruiken, kon ik ook het afspeelbare bereik van de stepper regelen. Ik heb het zo gemaakt dat een snelheidswaarde van nul als stop wordt beschouwd.

Het gebruik van een array in plaats van een berekening betekende dat er volledige controle was over de snelheid van elke noot, waardoor effectief een bereik voor het instrument werd ingesteld. Wanneer een stappenmotor zich in de buurt van zijn resonantiefrequentie bevindt, produceert hij ook een zeer vreselijk geluid (het lijkt erop dat hij afslaat). U kunt identificeren wat dat is en de waarde voor de toonhoogte met een octaaf wijzigen om dit op te lossen. Voor mij was de resonantiefrequentie rond F3, dus ik moest E3, F3 en F#3 een octaaf veranderen om dit te verhelpen. (Je kunt dit controleren met de "Tune Stepper.ino" code)

Een USB MIDI-apparaat maken

Ik wilde het apparaat als een MIDI-apparaat zien, dus ik deed wat speurwerk en ontdekte dat je de firmware van de AVR-chip op het bord kon veranderen. De firmware kan HIDUINO of mocuLUFA zijn. Ik koos voor mocuLUFA, omdat het een dual-boot-optie had, zodat ik de Arduino gemakkelijk kon herprogrammeren zonder de AVR-chip opnieuw te hoeven flashen. Ik zou eenvoudig een jumper op de ICSP-header kunnen aansluiten om te schakelen tussen USB MIDI en USB Serial.

Code

GitHub-opslagplaats
Ga gewoon naar mijn GitHub. Ik heb instructies voor het configureren en installeren van de code op je Arduino.https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Aangepaste onderdelen en behuizingen

Houdt de stappenmotoren op hun plaats Voegt een "vinger" toe aan de motor. Puur voor esthetische doeleinden.

Schema's

Locatie voor jumpers als u dit schild wilt gebruiken. Als je het op een breadboard wilt aansluiten, dan is het hier Schema van de Fritzing Breadboard-bedrading. Bevat enkele van de onderdeelwaarden die niet in het breadboard-diagram staan. Als je een MIDI DIN-aansluiting wilt gebruiken, gebruik dan deze lay-out.

Productieproces

  1. Amber
  2. Guillotine
  3. Silicium
  4. Ukelele
  5. Kip
  6. Compost
  7. Gelatine
  8. Vergrendelen
  9. Wodka
  10. Melk
  11. IJzer