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-gebaseerde MIDI-steppermotorsynthesizer

Onderdelen en benodigdheden

Onderdeel Aantal Opmerking
Arduino UNO 1 Elke vergelijkbare Arduino werkt voor meer I/O
A4988 Stepper Driver 4
Arduino CNC Shield V3 1 Optioneel, je kunt de A4988 drivers ook handmatig aansturen
12V 6A Voeding 1 Of vergelijkbaar om de steppermotoren aan te sturen
OpenBuilds NEMA 17 Steppermotor 4

Benodigde tools en machines

  • 3D-printer (generiek) - Volledig optioneel!

Over dit project

Ik was op YouTube te browsen toen ik filmpjes zag van floppy-drive muziek. Omdat floppy-drives worden aangestuurd door steppermotoren, besloot ik mijn eigen steppermotor-geluidsgenerator te bouwen.

Anderen hadden dit al gedaan, maar de code was vaak niet gedeeld, of slecht/beperkt. Omdat ik C++ leerde op school, besloot ik mijn vaardigheden te gebruiken om een simpele, gemakkelijk te gebruiken en aanpasbare code te schrijven.

Het Gesamtproces

In essentie: MIDI-data extraheren en omzetten naar een snelheid waarmee een steppermotor de bijbehorende toonhoogte produceert.

MIDI-data extraheren

Dit was eenvoudig. Met de MIDI-bibliotheek kon ik de MIDI-data interpreteren en doorsturen naar een functie die de snelheid regelt.

De stappen motoren aansturen

A4988 drivers hebben twee pinnen die de motor direct aansturen: STEP en DIR. DIR bepaalt de draairichting (kloksgewijs/tegenkloksgewijs), STEP laat de motor één stap maken bij elke HIGH-puls (hoeveelheid afhankelijk van microstepping-resolutie). Omdat de klank niet beïnvloed wordt door richting, zet ik DIR laag (of verbind met GND). Nu kan ik de motor sturen met een simpele digitalWrite.

De uitdaging: meerdere motoren tegelijk

Ik wilde meerdere steppermotoren tegelijkertijd aansturen, dus delay() was geen optie (motoren zouden niet simultaan draaien). In plaats daarvan gebruikte ik micros() om de pulsduur te berekenen. Omdat elke motor een andere snelheid heeft, gebruikte ik arrays voor snelheidsvariabelen, waarbij de index correspondeert met motornummer en MIDI-kanaal. millis() had onvoldoende resolutie voor verschillende toonhoogtes.

Arrays maken het mogelijk om één variabele voor alle motoren te gebruiken, en de Arduino kan elk aantal stappen aansturen door de array-grootte aan te passen!

Snelheidsberekeningen

In een test stuurde ik een 440 Hz blokgolf (via tone) naar de STEP-pin en de motor produceerde een A440 toon. Omdat de snelheidswaarde de periode in microseconden is, converteerde ik nofrequenties naar periodes. Deze stonden in een array pitchValues, geïndexeerd op MIDI-nootwaarde. Dit gaf volledige controle over de speelbare bereik van het instrument.

Nabij de resonantiefrequentie produceert een steppermotor een vreselijk geluid (lijkt op stallen). Dit kun je oplossen door de waarde met een octaaf te verschuiven. Bij mij lag de resonantie rond F3, dus E3, F3 en F#3 moesten een octaaf omhoog. (Controleer dit met de "Tune Stepper.ino" code).

Een USB-MIDI-apparaat maken

Ik wilde dat het apparaat als MIDI-apparaat herkend wordt. Na onderzoek ontdekte dat je de firmware van de AVR-chip kunt wijzigen: HIDUINO of mocuLUFA. Ik koos mocuLUFA vanwege de dual-boot optie: met een jumper op de ICSP-header schakel je tussen USB-MIDI en USB-Serieel, zodat herprogrammeren zonder re-flashen mogelijk is.

Code

De complete code, inclusief installatie- en configuratie-instructies, vind je op mijn GitHub:

https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument

Aangepaste onderdelen en behuizingen

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

Schema's

CNC Shield V3 jumper-locaties:

Arduino-gebaseerde MIDI-steppermotorsynthesizer

Breadboard-aansluiting:

Arduino-gebaseerde MIDI-steppermotorsynthesizer

Schema van de Fritzing breadboard-aansluiting (met extra componentwaarden):

Arduino-gebaseerde MIDI-steppermotorsynthesizer

MIDI DIN-jack aansluiting:

Arduino-gebaseerde MIDI-steppermotorsynthesizer

Productieproces

  1. Bernsteen: van oude hars tot wetenschappelijke schat – geschiedenis, eigenschappen en modern gebruik
  2. De Guillotine: Geschiedenis, Ontwerp en Nalatenschap
  3. Silicium: Eigenschappen, Productie en Marktverwachtingen
  4. De Ukulele: Van Portugese Wortels tot Moderne Vakmanschap
  5. De Complete Gids tot de Amerikaanse Kippenindustrie: Geschiedenis, Productie en Kwaliteitscontrole
  6. Compost: De Ultieme Oplossing voor Bodemverrijking
  7. Gelatine: Van Oud Eiwit tot Moderne Toepassingen – Productie, Gebruik en Veiligheid
  8. De Evolutie en Fabricage van Moderne Pin-Tumbler Sloten
  9. Wodka: Van Oude Distillatie tot Moderne Productie
  10. Melk: Productie, Verwerking en Voeding in de Verenigde Staten
  11. IJzer: Eigenschappen, Geschiedenis en Alledaagse Toepassingen