Inhoudsopgave:

Microcontroller Fabric Tone Generator in C-code - Ajarnpa
Microcontroller Fabric Tone Generator in C-code - Ajarnpa

Video: Microcontroller Fabric Tone Generator in C-code - Ajarnpa

Video: Microcontroller Fabric Tone Generator in C-code - Ajarnpa
Video: Fabric Synth 2024, Juli-
Anonim
Microcontroller Fabric Tone Generator in C-code
Microcontroller Fabric Tone Generator in C-code

Eind oktober vorig jaar stuurde instructables-gebruiker carmitsu me een bericht na het zien van mijn lunchbox-synth. Uit zijn bericht: Ik geef muziekles op de basisschool. We spelen veel blokfluitmuziek. d.w.z. de kinderen spelen kleine fluiten…… Ik heb verschillende kinderen met speciale behoeften die deze zwarte posterborden kunnen gebruiken met cirkels met de naam van het biljet erop. Deze leerlingen duwen op de cirkels met notennamen terwijl de rest van de leerlingen een liedje spelen….. De meeste kinderen met speciale behoeften kunnen dit redelijk goed en in de maat met de muziek doen. Waar ik naar op zoek ben, is een heel eenvoudige geluidsgenerator te bouwen zodat deze kinderen dezelfde toonhoogte kunnen spelen als die door de studenten op hun blokfluiten worden gespeeld. Ik zou maar een paar plaatsen zijn. Ik dacht dat ik een soort kleine knop aan de onderkant van hun ronde cirkels kon bevestigen, zodat wanneer ze erop drukken het geluid uit een kleine luidspreker zou komen, luid genoeg zodat ze het konden horen. Hoe kon ik weerstand bieden aan een moeder die lerares is en die van school hield? Eerlijk gezegd kon ik dat niet. Dit is zo'n beetje een kroniek van het project en instructies over hoe u uw eigen project kunt bouwen.

Stap 1: Het begin of waarom ik het niet bij analoog kon houden

Het begin of waarom ik het niet bij analoog kon houden
Het begin of waarom ik het niet bij analoog kon houden

De goede dingen beginnen op de volgende pagina. Als je wilt weten hoe ik de onderdelen heb gebruikt die ik heb gemaakt, lees dan verder. De echte timer: Nadat ik even over het project had nagedacht, dacht ik meteen aan de piëzo-toongenerator uit mijn op-amps Forest Mims III-boek. Het leek een goede manier om te gaan, het is gewoon een piëzo, een 741 IC en een paar passieve componenten. Geen big deal toch? Nou, het heeft 2 problemen, 1) als je de schakelaar indrukt, is het mogelijk om de toonhoogte te veranderen 2) het is verdomd bijna onmogelijk om te stemmen. De eerste kan waarschijnlijk worden overwonnen met wat debounce-technologie, hoewel ik niet wist hoe ik dat moest doen zonder nog een teller toe te voegen. Het kan ook een probleem zijn met het gebruik van een piëzo. Het tweede probleem werd pas onpraktisch toen je begon te proberen een bepaalde toonhoogte te raken. Hoe zit het met de 555? De datasheet toont een tijdvertragingsfunctie op basis van weerstanden en condensatoren. Dat is geweldig totdat je begint met het typen van werkelijke waarden van delen uit de echte wereld, en dan zul je merken dat het raken van een toonhoogte van 440 Hz een beetje moeilijk begint te worden. Je kunt trimpotten gebruiken om het af te stemmen, maar na verloop van tijd hebben ze de neiging om te bewegen. Het constant afstemmen van het instrument, gecompileerd bovenop de snelle stijging van de kosten en het aantal onderdelen, en mijn vrouw die de toonhoogte veranderde toen ze op de knop drukte, doodde de 555 voor dit project. Op-amp: Geen probleem, mensen hebben synths gemaakt met op-amps sinds voor mijn geboorte. Hoe moeilijk kan het zijn om een heel eenvoudige te maken, met weinig onderdelen en specifieke aantekeningen? Moeilijker dan ik dacht. De meeste ontwerpen die er zijn, zijn erg ingewikkeld voor dit project. Synth-ontwerpers zijn uit op de perfecte golfvorm/toon. Dit is rechtstreeks in strijd met een project dat goedkoop genoeg zou moeten zijn voor het school- of lerarenbudget. Het bouwen van een toetsenbord is eenvoudig genoeg, het is gewoon een stel weerstanden en stroom of een stel diodes en stroom. Het is de rest van het circuitontwerp en de kosten van aangepaste pcb's die uit de hand beginnen te lopen voor iemand op een beginnend elektronicaniveau. Herdefinitie van het project: Dus het project werd opnieuw gedefinieerd voordat ik echt aan de slag ging. Ik had iets nodig dat een luidsprekerpin op tijd kon schakelen met een druk op de knop. Ik wilde geen printplaat ontwerpen en kopen. Dit moest zo min mogelijk componenten gebruiken en als een beginnerskit worden geassembleerd. Het staarde me de hele tijd in het gezicht. Duh!! Microcontroller! Microcontroller: Dus nadat ik zowel een Modern Devices Bare Bones Arduino-kit als een Evil Mad Scientist Simple Target Board had gekocht en ze maandenlang op mijn bureau had laten zitten zonder dat ik ze gebruikte, had ik het perfecte introductieproject. Ik begon te kijken naar de tijd die het kost om beide samen te stellen, de leercurve voor de code, de kosten, de benodigde extra onderdelen en het te laten doen wat ik wil en vestigde me op het doelbord. De kosten waren redelijk gelijk, $ 15 plus een FTDI-kabel van $ 20 voor de Arduino, $ 12 plus een USBtinyISP-programmeur van $ 22. Ik kende C++ al van het kleine college dat ik kon uitstaan en dacht dat C voor microcontrollers niet zo slecht zou zijn, terwijl ik behalve een lampje knipperen om ervoor te zorgen dat ik mijn kit goed in elkaar zette, ik geen Arduino-ervaring had. Beiden zouden gemonteerd kunnen worden. Het was nogal een gooi, dus ik besloot op de minder delen van de twee, het doelbord.

Stap 2: Wat je nodig hebt Rev 1

Wat je nodig hebt Rev 1
Wat je nodig hebt Rev 1

OnderdelenkostenUSBtinyISP AVR Programmer Kit (USB SpokePOV Dongle)v2.0 $22.00https://www.adafruit.com/index.php?main_page=product_info&cPath=16&products_id=46Evil Mad Scientist labs ATmegaXX8 Mini Dev Kits $12Headers, 6-pins DIP, 5-pk $2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) $2.79https://www.radioshack.com/product/index.jsp?productId=2062406SPST Normaal Open Momentary Switches (we gebruikten 5) $3,49 (4pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA" Batterijhouder $1,79https://www.radioshack.com/product/index.jsp?productId=2102735SPST Submini-schuifschakelaar (optioneel voor aan / uit-schakelaar) $ 2,69 (2-pack) https://www.radioshack.com/product/index.jsp?productId=2062490LED en weerstand (optioneel, als je een aan / uit-lampje wilt) $ zou gratis moeten zijn als ze rondslingeren Draad $ moet ook rondslingeren Zilveren soldeer (als dit in de buurt van kinderen komt, moet je waarschijnlijk geen lood gebruiken, ouders worden behoorlijk raar over dat soort dingen;)) Alcohol wrijven (om opnieuw te move flux)Als u op sommige plaatsen geld wilt besparen, hoeft u geen onderdelen van RadioShack te krijgen. Ik deed het omdat ze dichtbij en voorspelbaar zijn.

Stap 3: Montage Rev 1

Montage Rev 1
Montage Rev 1
Montage Rev 1
Montage Rev 1

Zet je onderdelen in elkaar zoals afgebeeld. Zorg ervoor dat u ontsmettingsalcohol en een vloeimiddelborstel gebruikt als u klaar bent om alle vloeimiddel van het solderen te verwijderen. Het schema is hieronder voor degenen die er de voorkeur aan geven. D1 en R1 kunnen alles zijn wat je wilt, het is gewoon een powerlampje. C1 is gewoon om de kracht een beetje consistenter te maken. Ik gebruikte een 10uF. Dit schema is hetzelfde voor de latere versies, verwissel gewoon drukknoppen voor stoffen schakelaars. in de laatste revisie heb ik schakelaars toegevoegd aan PC4 en PC5 of pinnen 27 en 28.

Stap 4: Wat je nodig hebt Rev 2

Wat je nodig hebt Rev 2
Wat je nodig hebt Rev 2

Dus eigenlijk verwissel je de Radio Shack-knoppen voor handgemaakte stoffen exemplaren. Je hebt nodig: Meerdere kleuren stof, of één kleur als je elke noot dezelfde kleur wilt hebben. Het quiltgedeelte van uw dichtstbijzijnde stoffenwinkel is de beste plaats om dit goedkoop te krijgen. Quiltkwartieren zijn $ 1,50 en je kunt er een heleboel schakelaars uit halen. Je kunt ze bij de meeste stoffenwinkels goedkoop krijgen. JoAnn heeft het gereedschap en 25 voor $2. Hiervoor heb je een hamer nodig. Draad, ik heb 22AWG gebruikt, ik raad kleinere aan als je die hebt. Fuseren, om de gekleurde en geleidende stof aan elkaar te laten kleven. Vraag ernaar in de winkel en je kunt het waarschijnlijk bij de werf kopen. Dit zou waarschijnlijk goed werken, hoewel ik je wel aanraad om het aan iemand te vragen. Ik stel voor dat je gewoon een paar verschillende probeert totdat je vindt wat het beste werkt. Krimpkous, dit maakte het geheel een stuk beter beheersbaar. krimpdraden samen als ze elkaar passeren en ze zullen een stuk beter blijven zitten.

Stap 5: Montage Rev 2

Montage Rev 2
Montage Rev 2
Montage Rev 2
Montage Rev 2
Montage Rev 2
Montage Rev 2

Leg de veelkleurige stof over elkaar en knip een vierkant uit, het hoeft niet perfect te zijn. Strijk de stof om eventuele vouwen eruit te krijgen, leg ze weer op elkaar en zorg ervoor dat de randen allemaal overeenkomen. Snijd alle randen die dat niet doen. Snijd de boven- en onderkant rond, waarbij de linker- en rechterkant recht blijven. Je gaat de schakelaar omkeren na het naaien, dus maak de afgeronde zijkanten niet te rond en laat voldoende hoogte aan de platte kanten om de schakelaar gemakkelijk door te drukken als je klaar bent. Rond de platte kant van de eerste en laatste schakelaar af. Ga naar uw naaimachine en plaats twee van de toeren bij elkaar zodat de goede kant naar elkaar toe wijst en naai een naad op de platte delen. Zodra de bovenkanten van de knopen zijn genaaid, knip vierkanten uit de geleidende stof en smelt een kant vast. Knip de draad op lengte en strip een uiteinde. soldeer de draad rond een van de oogjes. (het soldeer zal waarschijnlijk niet aan het oogje blijven kleven) Knip een kleine spleet in de stof in een hoek en hamer op het oogje om de stof en de draad te bevestigen. verwijder de achterkant van de fusing en smelt de geleidende stof aan de achterkant van de gekleurde stof. Herhaal dit voor alle schakelaars. Om het u gemakkelijker te maken, kunt u de draden samen krimpen als een draad de draad passeert voor de volgende schakelaar. Neem of maak een stuk stof ter lengte van de schakelaarset en knip een strook geleidende stof over de lengte ervan af. In tegenstelling tot de gekleurde schakelaars is dit één lang stuk. Dit is wat de knoppen aanraken om de verbinding te maken. Knip een klein gleufje en bevestig er een draad aan met een oogje, zoals de gekleurde schakelaartoppen. Smelt het aan de achterkant van de onderste stof. Naai de boven- en onderkant samen met de geleidende stof naar buiten gericht, gebruik een meetlat om de set om te keren nadat deze is genaaid. Knip een paar kleine gaatjes in de vulling, ik gebruikte een eetstokje om een cirkel, verwijder dan gewoon het eetstokje en maak de snede. Snijd ze in vorm en steek ze in de schakelaars. Dit is wat de geleidende stof uit elkaar houdt. Het kan gemakkelijker zijn om de vulling in te brengen terwijl u de schakelaars omkeert in plaats van erna. Het spul dat ik gebruikte verscheurde behoorlijk terwijl ik het aan het inbrengen was en ik moest verschillende vulling krijgen. Sluit eindelijk de draden aan op het doelbord en je bent helemaal klaar. De lange onderste strook wordt geslepen.

Stap 6: Wat u nodig hebt Rev 3

Wat je nodig hebt Rev 3
Wat je nodig hebt Rev 3

In Rev 3 heb ik de schakelaars onafhankelijk van de bedrading gemaakt. Dit bespaarde een hoop tijd. Ik vind het uiterlijk van het eindresultaat ook veel mooier. Dus hier zijn de nieuwe onderdelen die je nodig hebt: Snaps, ik heb ze net van JoAnn's. Ze kwamen met een installatietool die niet slecht was voor $ 7. Ik zou in plaats daarvan een van de tanggereedschappen aanraden, omdat ik mijn gereedschap uit elkaar moest halen om de snaps in het midden te installeren. Naaien zou een goed alternatief zijn, hoewel ze langer duren om te hechten. Geleidende draad, Spark Fun heeft dingen die in je naaimachine kunnen. Ik moest heel langzaam gaan in mijn machine of de draad zou breken. Uw kilometerstand kan variëren

Stap 7: Montage Rev 3

Montage Rev 3
Montage Rev 3
Montage Rev 3
Montage Rev 3
Montage Rev 3
Montage Rev 3
Montage Rev 3
Montage Rev 3

Deze revisie was een stuk beter dan de vorige in termen van tijd tot gebouwd. Bovendien heeft het hebben van verwijderbare schakelaars mijn gezond verstand meer dan eens gered. Begin met het maken van de basis. Het is slechts één quiltkwart dubbelgevouwen. Leg een laag watten op de bovenkant en naai, laat een gat over om het om te keren. Duw het ding door het gat en je hebt in feite een kussenachtig ding. Ik heb het gequilt, dus het was gemakkelijker om mee te werken. Gebruik gewone draad en ga los. Ik heb hier diamanten op gedaan, maar misschien zet ik de volgende keer een draak achterin, of iets cools. Nu, op naar de schakelaars. Ik vind dit ontwerp leuk omdat je er van tevoren heel veel van kunt maken en gewoon kunt gebruiken wat je wilt. begin met een stukje karton, papier of stof en knip er een peervorm uit. Gebruik dat als richtlijn om een boven- en onderkant voor elke schakelaar te snijden. Ik heb een kleur gesneden voor elke onderkant en een andere kleur voor de bovenkant, maar je kunt creatief zijn en doen wat je wilt. Snijd je gids in een lollyvorm die gemakkelijk in de schakelaar past. Verleng de "stok" zodat deze over de rand van de "peer" kan worden gewikkeld. Knip de vorm uit de smeltende en geleidende stof en smelt een kant van de geleidende stof. Verwijder de achterkant van het fuseermateriaal en smelt het vast aan de bovenkant van de stof die aan de onderkant zit en aan de onderkant van de stof die aan de bovenkant komt. Wikkel het extra stukje om de bovenkant. Ga naar uw naaimachine en plaats vulling met gaten tussen de boven- en onderstof. Naai buiten de geleidende stof en sla het "stok" -gedeelte van de schakelaar over. Ik ontdekte dat het mogelijk is om de bovenste geleidende stof aan de onderkant te naaien, waardoor een korte broek ontstaat. Het is beter om niet door de geleidende stof heen te naaien. Bevestig de drukknopen en de schakelaar is klaar. Ik vond het gemakkelijker om de mannelijke snap te gebruiken voor alle bodem / GND-verbindingen en de vrouwelijke snap voor alle toppen. Hierdoor zijn alle schakelaars uitwisselbaar. De schakeling: Het voordeel van rondjes knippen is dat je veel extra bits hebt. Ik nam mijn restjes, versmolt grote stukken fusing tot grote stukken geleidende stof en gebruikte die om de kleinere rechthoeken uit te snijden die ik als kussentjes gebruikte. Leg uw schakelaars grofweg neer en smelt de pads aan de basis met voldoende ruimte om er een lijn aan te naaien en een klik te hebben. De voet van de naaimachine die ik gebruikte, was niet zo vriendelijk om heel dicht bij de snap te komen, dus houd daar rekening mee en geef jezelf wat ruimte. Omdat ik geleidende draad kreeg die in mijn naaimachine kon, naaide ik gewoon een lijn van pad naar pad en terug. Ik moest langzaam gaan of de draad zou breken, maar het was een ton sneller dan met de hand naaien. Ook met geleidende draad op de spoel en naald kreeg ik een echt goede stevige verbinding. Het spul rafelt als een gek, maar een beetje knutsellijm of Elmers maakt dat goed. Probeer de lijnen goed uit elkaar te houden en je zou geen problemen moeten hebben. Eindmontage: klik al je schakelaars vast, sluit het bord aan, laad de code en je bent klaar. Ik gebruikte draad om van het bord naar de pad te gaan en naaide de draad vervolgens met de hand aan de basis. Voor de volgende versie monteer ik het bord in een plastic doos met drukknopen om het aan de basis te bevestigen, zodat inactieve vingers het niet uit elkaar trekken.

Stap 8: Coderen

Code
Code

Als je nog nooit een chip hebt geprogrammeerd, is dit een wat ontmoedigende taak. Het helpt niet dat de tools schilferig zijn en dat je meestal dezelfde bewerking meerdere keren moet uitvoeren. De twee beste bronnen die ik heb gevonden om inzicht te krijgen in wat er gaande is, is de pagina voor de USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ en de spoedcursus in het programmeren van het ruisspeelgoed, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Deze zouden je op weg moeten kunnen helpen.

Veel mensen houden van Arduino voor deze codering en er is niets mis mee om het te gebruiken, behalve dat ik vind dat het een normaal eenvoudig programma veel opzwelt. Ik kende ook C en ken Arduino niet. Misschien op een dag, als er tijd is.:) Code: {{{ #include //Gebruik een pin om de SPK aan te zetten /// Typedefs ////////// typedef unsigned char u8; int main(void) { u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); //Stel SPK in voor uitvoer PORTD =(1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); //Set-knop hoog PORTC = (1 << PC4) | (1 <<PC6); TCCR2B = (1 << CS21); // Timer instellen terwijl (1) {btnState0 = ~ PINC & (1 << PC5); btnState1 = ~PINC & (1 << PC4); btnState2 = ~PIND & (1 << PD0); btnState3 = ~PIND & (1 << PD1); btnState4 = ~PIND & (1 << PD2); btnState5 = ~PIND & (1 << PD3); btnState6 = ~PIND & (1 << PD4); if (btnState0) { if (TCNT2 >= 190) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } if (btnState1) { if (TCNT2 >= 179) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } if (btnState2) { if (TCNT2 >= 159) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } if (btnState3) { if (TCNT2 >= 142) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } if (btnState4) { if (TCNT2 >= 126) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } if (btnState5) { if (TCNT2 >= 119) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } if (btnState6) { if (TCNT2 >= 106) { PORTB ^= (1 << PD6); // Draai SPK-pen TCNT2 = 0; } } } } }}} Waar komen de staanplaatsen vandaan? Een beetje wiskunde was nodig. De timerklok op de atmega 168 loopt op 1 MHz. Dat is veel te snel voor audio dus moeten we de prescaler /8 gebruiken. Omdat we de uitgangspen vervolgens hoog en vervolgens laag moeten omdraaien om 1 cyclus te maken, moeten we het antwoord door 2 delen om de juiste toonhoogte te krijgen. De formule ziet er als volgt uit, Pitch om in code= (1000000/8)/(Target frequency*2) te zetten Voor A(440) zou dit 125000/880=142.045 of 142 zijn voor onze doeleinden, aangezien de waarde een geheel getal moet zijn. De doelfrequenties van biljetten zijn vrijwel overal online te vinden en zijn over het algemeen allemaal hetzelfde. Ik wil nog steeds een case-statement toevoegen in plaats van een heleboel Ifs te gebruiken en PWM gebruiken om het volume en de toonhoogte van de luidspreker beter te regelen, maar voor nu werkt dit.

Aanbevolen: