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 automatische gitaartuner

Componenten en benodigdheden

Arduino UNO
× 1

Apps en online services

Simulink

Over dit project

Een van de belangrijkste dingen bij het spelen van gitaar is ervoor te zorgen dat het instrument goed gestemd is. Zelfs de beste gitarist zal niet goed klinken met een ontstemde gitaar. Met de hand gitaren stemmen met een standaard stemapparaat is altijd gebruikelijk geweest, maar een automatisch stemapparaat maakt het veel gemakkelijker en leuker! Dit op Arduino gebaseerde project stemt je gitaar voor je.

Hier is een video die het project in actie laat zien:https://www.mathworks.com/videos/automatic-guitar-tuner-using-simulink-and-arduino-1501787185047.html

Overzicht

De afbeelding hierboven toont een overzicht van de automatische gitaarstemmer.

  • De drukknop wordt gebruikt om de te stemmen snaar te selecteren
  • Een display met zes leds wordt gebruikt om aan te geven welke string is geselecteerd
  • De grijper die op de motor is aangesloten, wordt gebruikt om de afstemknop te draaien totdat de snaar gestemd is.

De in- en uitgangen worden bestuurd door de vier bovengenoemde circuits:een digitaal ingangscircuit voor de drukknop, een analoog audio-ingangscircuit voor de gitaar, een digitaal uitgangscircuit voor het LED-display en een motoraandrijfcircuit voor de stemsleutel grijper. Deze vier circuits werken samen met een Arduino Due, die een algoritme uitvoert dat is ontwikkeld met Simulink.

Audio-ingangscircuit

De gitaar wordt via een standaard gitaarkabel op het stemapparaat aangesloten. Het uiteinde van een gitaarkabel heeft twee aansluitingen, de tip en de sleeve. Het ene uiteinde van de kabel wordt aangesloten op een ingangsaansluiting, die aansluitingen heeft voor de punt en de huls. Ik heb draden op deze draden gesoldeerd om de punt en de huls aan te sluiten op het audio-ingangscircuit.

Ik zou het gebruik van een TL972 opamp voor dit circuit aanraden. Het is een zeer ruisarme rail-to-rail versterker die kan werken bij zeer lage voedingsspanningen.

Gemotoriseerde Tuning Peg Gripper

Ik kon niet zomaar een DC-motor gebruiken voor dit project. Ik had een motorreductor nodig met een laag toerental en een hoog koppel. De motor die ik gebruikte heeft een snelheid van 6 RPM en een maximum koppel van 613 oz-in. Het heeft een spanningsbereik van 3-12 V, en daarom gebruikte ik een 9 V-batterij als stroombron.

Op de as van de motor heb ik een eenvoudig grijpmechanisme gemonteerd met een klemnaaf, vier schroeven en wat tape.

Software

Ik heb Simulink en het bijbehorende ondersteuningspakket voor Arduino gebruikt om het algoritme voor de tuner te ontwikkelen. Simulink is een omgeving met blokdiagrammen die wordt gebruikt voor het ontwikkelen van algoritmen en het modelleren van dynamische systemen. Met het ondersteuningspakket kan ik lezen van en schrijven naar pinnen op de Arduino met behulp van Simulink-blokken. Met behulp van de externe modusmogelijkheden van de software kan ik een algoritme op de Arduino simuleren met automatische codegeneratie en parameters afstemmen terwijl de simulatie loopt, zonder dat ik code opnieuw hoef te compileren. Ik kan het algoritme vervolgens op de hardware inzetten voor zelfstandige uitvoering. Het model dat ik heb gemaakt, wordt hieronder weergegeven.

Externe modus maakt het gebruik van scope-blokken mogelijk om delen van het algoritme te bewaken terwijl het op de hardware draait. Dit is vooral handig om de digitale invoer van de knop en de analoge invoer van de gitaar te controleren. Uit het bereik van de knop kunnen we zien dat de invoer verandert van 0 naar 1 wanneer op de knop wordt gedrukt.

Ik wil dat deze verandering van 0 naar 1 een verandering in de geselecteerde string activeert. Dit staat bekend als een stijgende trigger. Ik heb een Stateflow-diagram gemaakt met de naam "Select String" met zes statussen, één voor elke reeks, en verandert van de ene status naar de volgende op basis van deze stijgende trigger-invoer. Hier is een meer gedetailleerd overzicht van de Stateflow-grafiek.

Bij binnenkomst in elke status wordt de LED-pin voor de bijbehorende string op hoog gezet. Bij het verlaten van elke status wordt de pin op laag gezet. Ik koos de lage E-snaar, de laagste van de zes snaren, als mijn standaard. Als ik de tuner voor het eerst inschakel, start hij in deze standaardstatus.

Er zijn zeven uitgangen op het Stateflow-diagram:één voor de LED voor elk van de zes strings en één met de naam "periodRange", die ik later zal bespreken. De zes LED-uitgangen gaan rechtstreeks naar Arduino digitale uitgangsblokken om de juiste LED aan of uit te zetten.

Laten we nu eens kijken naar het audioverwerkingsgedeelte van het model. Het gitaarsignaal komt binnen via het analoge ingangsblok. Ik heb de sampletijd van het blok ingesteld op 0,0002 seconden voor een samplefrequentie van 5 kHz. Toen ik gitaar speelde en het audioscope-blok opende, kon ik een golfvorm zien zoals die hieronder.

Het scopeblok hielp me de potentiometer in het audiocircuit af te stemmen om de versterking van de ingang te veranderen. De versterking moet zo hoog mogelijk worden ingesteld zonder dat de piek van de golfvorm de maximale waarde van 1023 bereikt. Dit zorgt voor de meest nauwkeurige uitlezing van het signaal.

Als de gitaar niet wordt bespeeld, moet het ingangssignaal een vlakke lijn zijn ergens tussen 500 en 700. In mijn geval was het rond de 550. Het is belangrijk om deze waarde te weten, omdat de tuner de audio alleen moet verwerken als er een noot is gespeeld wordt. Ik koos een waarde van 575, net boven deze vlakke lijn, als mijn drempel. De audio wordt alleen verwerkt als het signaal boven deze drempelwaarde ligt. Omdat ik met Simulink parameters kan afstemmen terwijl een simulatie loopt, kon ik gemakkelijk mijn drempelwaarde instellen.

Wanneer een enkele noot op een gitaar wordt gespeeld, is de gegenereerde golfvorm periodiek. De periode van de golfvorm komt overeen met een bepaalde muzikale toonhoogte. Het afstemalgoritme schat de toonhoogte van de snaar door de periode van de golfvorm te bepalen. Ik heb een MATLAB-functie geschreven die deze toonhoogteschatting uitvoert en deze in mijn Simulink-model opgenomen met behulp van het MATLAB-functieblok. Om te bepalen of de snaar gestemd is, heeft de MATLAB-functie een invoer nodig die aangeeft welk bereik van perioden voor elke snaar als gestemd wordt beschouwd. Dit is de output "periodRange" van het Stateflow-diagram. De functie bepaalt of de toonhoogte van de snaar te hoog, te laag of gestemd is op basis van het periodebereik, en genereert dienovereenkomstig outputs voor de motor.

De uitgangen van de MATLAB-functie zijn de drie pinnen die de motor aansturen. Deze uitgangen gaan rechtstreeks naar Arduino digitale uitgangsblokken.

Toen ik er zeker van was dat alles klopte met mijn algoritme, kon ik het op de hardware implementeren zodat het stand-alone kon draaien, zonder verbonden te zijn met de pc en onafhankelijk van Simulink.

Nu kan ik mijn gitaar automatisch stemmen!

Alle benodigde bestanden voor dit project zijn hier beschikbaar:

https://www.mathworks.com/matlabcentral/fileexchange/63697-automatic-guitar-tuner-using-simulink-and-arduino

Schema's

De schakeling voor de drukknop is een eenvoudige schakelaar met een pull-down weerstand. Het LED-displaycircuit omvat 6 LED's en een stroombegrenzende weerstand. Ik heb de analoge ingangspin 'A0' op de Arduino gebruikt om het audiosignaal van de gitaar te lezen. De Arduino Due leest spanningen tussen 0 V en 3,3 V. Het signaal dat van de gitaar komt, heeft echter een zeer lage amplitude en oscilleert rond de 0 V, wat betekent dat het enkele negatieve spanningen bevat die de Arduino niet kan lezen. Om dit op te lossen, moet het ingangscircuit het signaal versterken en een DC-offset toevoegen. Het circuit moet ook een laagdoorlaatfilter bieden om hoogfrequente componenten uit het signaal te verwijderen. Elk gesampled signaal mag geen frequenties bevatten die hoger zijn dan de helft van de bemonsteringsfrequentie. Omdat de tuner de audio samplet met een snelheid van 5 kHz, elimineert mijn circuit frequenties boven 2,5 kHz. Ik heb het circuit samengesteld zoals hieronder weergegeven. Ik bestuurde de gemotoriseerde stemsleutelgrijper met behulp van drie digitale uitgangspinnen van de Arduino aangesloten op een L293D H-bridge-chip . Met deze chip kunnen we de motor in beide richtingen draaien of de motor stoppen op basis van de toestanden van deze drie pinnen. Een van de pinnen wordt de activeringspin genoemd en de motor zal alleen draaien als de activeringspin te hoog is ingesteld. De andere twee pinnen bepalen de richting van de motor. Ik heb het circuit aangesloten zoals hieronder weergegeven.

Productieproces

  1. Elektrische gitaar
  2. Spark
  3. Titanium
  4. Biokeramiek
  5. Castanets
  6. Lijm
  7. Thread
  8. Acetyleen
  9. Asbest
  10. Dobbelstenen
  11. Tin