Innehållsförteckning:

Microcontroller Fabric Tone Generator i C-kod: 8 steg (med bilder)
Microcontroller Fabric Tone Generator i C-kod: 8 steg (med bilder)

Video: Microcontroller Fabric Tone Generator i C-kod: 8 steg (med bilder)

Video: Microcontroller Fabric Tone Generator i C-kod: 8 steg (med bilder)
Video: Precise GENERATOR with ARDUINO 1Hz - 8 MHz. DIY computer-controlled generator using Arduino NANO 2024, Juli
Anonim
Microcontroller Fabric Tone Generator i C-kod
Microcontroller Fabric Tone Generator i C-kod

I slutet av oktober förra året skickade instruktörer användaren carmitsu ett meddelande till mig efter att ha sett min lunchbox -synt. Från hans budskap: Jag undervisar i musik i grundskolan. Vi spelar mycket inspelningsmusik. dvs barnen spelar små flöjter … Jag har flera barn med speciella behov som kan använda dessa svarta affischstavlor med cirklar som har namnet på lappen på sig. Dessa elever trycker på cirklarna med anteckningsnamn samtidigt som resten av eleverna spelar en låt….. De flesta barn med speciella behov kan göra detta ganska bra och i takt med musiken. Det jag letar efter är att bygga en mycket enkel ljudgenerator så att dessa barn kan spela samma tonhöjd som de som spelas av eleverna på deras inspelare. Jag skulle bara vara några platser. Jag trodde att jag kunde fästa någon form av liten knapp i botten av deras runda cirklar så att när de trycker på dem kommer ljudet ur en liten högtalare, tillräckligt högt så att de kan höra. Hur skulle jag kunna motstå att ha en mamma som är lärare och gillat skolan? Sanningen ska sägas att jag inte kunde. Detta är i stort sett en krönika om projektet och instruktioner om hur du bygger din egen.

Steg 1: Början eller varför jag inte kunde hålla mig till analog

Början eller varför jag inte kunde hålla mig till analog
Början eller varför jag inte kunde hålla mig till analog

De bra grejerna börjar på nästa sida. Om du vill veta hur jag slutade använda de delar jag gjorde, läs vidare. Den verkliga timern: Efter att ha funderat lite på projektet tänkte jag genast på piezotongeneratorn från min op-amps Forest Mims III-bok. Verkade som en bra väg att gå, det är bara en piezo, en 741 IC och ett par passiva komponenter. Ingen stor grej va? Det har 2 problem, 1) när du trycker på omkopplaren är det möjligt att ändra tonhöjd 2) det är förbannat nästan omöjligt att ställa in. Det första skulle sannolikt kunna övervinnas med viss debounce -teknik, även om jag inte visste hur jag skulle göra det utan att lägga till en annan räknare. Det kan också vara ett problem med att använda en piezo. Den andra frågan blev bara otymplig när du började försöka slå en viss tonhöjd. Hur är det med 555? Databladet visar en tidsdlay -funktion baserad på motstånd och kondensatorer. Vilket är bra tills du börjar skriva in verkliga värden för verkliga delar, det är då du kommer att hitta en träff på 440Hz börjar bli lite svårt. Du kan använda trimkrukor för att få det inställt, men med tiden tenderar de att röra sig. Ständigt stämmer instrumentet, sammanställt ovanför snabb ökning av kostnad och mängd delar, och min fru gjorde tonhöjden när hon tryckte på knappen dödade 555 för detta projekt. Op-amp: Inga problem, människor har gjort synthar med op-ampere sedan innan jag föddes. Hur svårt kan det vara att göra en riktigt enkel, med få delar och specifika anteckningar? Svårare än jag trodde. De flesta designerna där ute är mycket komplicerade för detta projekt. Syntedesigners är ute efter den perfekta vågformen/tonen. Detta strider direkt mot ett projekt som ska vara tillräckligt billigt för skolans eller lärarnas budgetar. Att bygga ett tangentbord är enkelt nog, det är bara ett gäng motstånd och ström eller ett gäng dioder och ström. Det är resten av kretsdesignen och kostnaden för anpassade PCB som börjar gå ur styr för någon på en början elektroniknivå. Omdefinition av projekt: Så projektet blev omdefinierat innan jag ens började. Jag behövde något som kunde växla en högtalarpinne, i tid, med ett knapptryck. Jag ville inte behöva designa och köpa ett kretskort. Detta måste använda så få komponenter som möjligt och monteras som ett nybörjarpaket. Det stirrade mig i ansiktet hela tiden. Duh !! Mikrokontroller! Mikrokontroller: Så efter att ha köpt både ett Modern Devices Bare Bones Arduino -kit och en Evil Mad Scientist Simple Target Board och låtit dem sitta på mitt skrivbord i flera månader utan att ha använts, hade jag det perfekta introduktionsprojektet. Jag började titta på den tid det tar att sätta ihop båda, inlärningskurvan för koden, kostnaden, de extra delar som behövs och få den att göra vad jag vill och bestämde mig på målbrädan. Kostnaden var ganska jämn, $ 15 plus en $ 20 FTDI -kabel för Arduino, $ 12 plus en $ 22 USBtinyISP -programmerare. Jag visste redan C ++ från den lilla högskolan som jag kunde stå och tänkte att C för mikrokontroller skulle inte vara så illa, medan jag inte hade någon Arduino -upplevelse förutom att blinka för att se till att jag satte ihop mitt kit ordentligt. Båda kan monteras. Det var ganska mycket att kasta upp, så jag bestämde mig för de färre delarna av de två, målbrädan.

Steg 2: Vad du behöver Rev 1

Vad du behöver Rev 1
Vad du behöver Rev 1

Reservdelar KostnadUSBtinyISP AVR Programmeringssats (USB SpokePOV Dongle) v2.0 $ 22.00https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46 Evil Mad Scientist labs ATmegaXX8 Mini Dev Kits $ 12 Headers, 6-pin DIP, 5-pk $ 2,75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) $ 2,79https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Normally Open Momentary Switches (vi använde 5) $ 3,49 (4pack) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Batterihållare $ 1,79 https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Submini Slide Switch (tillval för strömbrytare) $ 2,69 (2-pack) https://www.radioshack.com/product/index.jsp?productId=2062490LED och motstånd (tillval, om du vill ha en strömlampa) $ borde vara gratis om de ligger runtWire $ borde också ligga runtSilverlödning (om detta går någonstans nära barn ska du förmodligen inte använda bly, föräldrar blir ganska konstiga med den typen av saker;)) Gnugga alkohol (för att åter flytta flux) Om du vill ha några platser att spara pengar behöver du inte få delar från RadioShack. Jag gjorde för att de är nära och förutsägbara.

Steg 3: Montering Rev 1

Montering Rev 1
Montering Rev 1
Montering Rev 1
Montering Rev 1

Sätt ihop dina delar enligt bilden. Var noga med att använda gnidningsalkohol och en flussborste när du är klar för att bli av med eventuellt flöde från lödning. Schematisk är nedan för dem som föredrar det. D1 och R1 kan vara vad du vill, det är bara en strömlampa. C1 är bara för att göra kraften lite mer konsekvent. Jag använde en 10uF. Denna schema är densamma för de senare versionerna, byt bara ut tryckknappar för tygbrytare. i den senaste revisionen lade jag till switchar till PC4 och PC5 eller stift 27 och 28.

Steg 4: Vad du behöver Rev 2

Vad du behöver Rev 2
Vad du behöver Rev 2

Så i princip byter du ut Radio Shack -knapparna för handgjorda tyg. Du behöver: Flera färger av tyg eller en färg om du vill att varje ton ska ha samma färg. Quiltningsdelen i din närmaste tygaffär är det bästa stället att få det billigt. Quiltkvarteren kostar $ 1,50 och du kan få massor av strömbrytare ur en. Ledande tyg, jag föreslår att Flectron -tyget från LessEMF kostar $ 20 för en 12 "x54" bitEyelets för att fästa tråden på tyget. Du kan få dem på de flesta tygaffärer billigt. JoAnn har verktyget och 25 för $ 2 Du behöver en hammare för detta. Tråd, jag använde 22AWG, jag föreslår mindre om du har det. Smältande, för att få det färgade och ledande tyget att hålla ihop. Fråga i butiken och du kan förmodligen köpa den vid gården. Detta skulle förmodligen fungera bra, även om jag föreslår att du frågar någonBatting, jag använde en riktigt lös grej först, bytte sedan till något stramare stickning. Jag föreslår att du bara provar ett par olika tills du hittar det som fungerar bäst. Värmekrympslangar, detta gjorde det hela mycket mer hanterbart. värmekrymptrådar tillsammans när de passerar varandra och de kommer att stanna mycket bättre.

Steg 5: Montering Rev 2

Montering Rev 2
Montering Rev 2
Montering Rev 2
Montering Rev 2
Montering Rev 2
Montering Rev 2

Lägg det mångfärgade tyget över varandra och klipp ut en fyrkant, det behöver inte vara perfekt. Stryk tyget för att få ut några veck, lägg dem ovanpå varandra igen och se till att kanterna matchar alla. Klipp av alla kanter som inte gör det. Du kommer att vända omkopplaren efter sömnad, så gör inte de rundade sidorna för runda och lämna tillräckligt med höjd på de plana sidorna för att enkelt trycka på strömbrytaren när du är klar. Runda ut den platta sidan av den första och sista omkopplaren. Gå vidare till din symaskin och lägg ihop två av varven så att den goda sidan vetter mot varandra och sy en söm på de plana delarna. När knapparnas toppar är sydda, klipp ut rutor ur det ledande tyget och smält ihop ena sidan. Klipp tråden i längd och ta bort ena änden. löd tråden runt en av öglorna. (lödet kommer troligen inte att fastna på öglan) Skär en liten slits i tyget i ett hörn och hammra öglan för att fästa tyget och tråden. ta bort stödet från fixeringen och säkra det ledande tyget mot baksidan av det färgade tyget. Upprepa för alla omkopplare. För att göra det enklare kan du värma krympröret ihop trådarna när en tråd passerar tråden för nästa omkopplare. Hämta eller gör ett tygstycke längs omkopplarens uppsättning och skär en remsa av ledande tyg längden på det. Till skillnad från de färgade omkopplarna är detta en lång bit. Detta är vad knapparna trycker på för att upprätta anslutningen. Klipp en liten slits och fäst en tråd till den med ett ögla, som de färgade omkopplarna. Säkra den på baksidan av bottenväven. Sy topp och botten tillsammans med det ledande tyget utåt, använd en gårdspinne för att vända uppsättningen efter att den har sytt. Klipp några små hål i vadd, jag använde en ätpinne för att få en cirkel, ta bara bort ätpinnen och gör snittet. Skär dem i form och sätt in dem i brytarna. Det är det som håller det ledande tyget isär. Det kan vara lättare att sätta in vadd medan du vänder omkopplarna istället för efter. De saker jag använde rev upp ganska dåligt när jag satte in det och jag var tvungen att få olika slag. Slutligen koppla trådarna till målbrädet och du är klar. Den långa bottenlisten slipas.

Steg 6: Vad du behöver Rev 3

Vad du behöver Rev 3
Vad du behöver Rev 3

I Rev 3 gjorde jag omkopplarna oberoende av ledningarna. Detta sparade massor av tid. Jag gillar också utseendet på det färdiga resultatet mycket mer. Så här är de nya delarna du behöver: Snaps, Har precis fått dem från JoAnn's. De kom med ett installationsverktyg som inte var så dåligt för $ 7. Jag skulle föreslå ett av tångverktygen istället eftersom jag var tvungen att ta isär mitt verktyg för att installera snaps i mitten. Syningar skulle vara ett bra alternativ, även om de tar längre tid att fästa. Ledande tråd, Spark Fun har saker som kan gå i din symaskin. Jag var tvungen att gå riktigt långsamt i min maskin annars skulle tråden gå sönder. Din körsträcka kan variera

Steg 7: Montering Rev 3

Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3
Montering Rev 3

Denna översyn var mycket bättre än den förra när det gäller tid till byggnad. Plus, att ha flyttbara switchar räddade mitt förnuft mer än en gång. Börja med att göra basen. Det är bara en quiltkvartel vikad på mitten. Lägg ett lager vadd på toppen och sy, lämna ett hål för att vända det. Skjut saken genom hålet och du har i princip en kudde. Jag quiltade det så det var lättare att arbeta med. Använd vanlig tråd och bli galen. Jag gjorde diamanter på den här, men kanske nästa gång lägger jag en drake i ryggen, eller något coolt. Nu, till switcharna. Jag gillar den här designen eftersom du i princip kan göra massor av dessa i förväg och bara använda vad du vill. Börja med att använda en bit papp, papper eller tyg och klipp ut en päronform. Använd det som en guide för att skära en topp och en botten för varje omkopplare. Jag klipper en färg för varje botten och en annan färg för topparna, men du kan vara kreativ och göra vad du vill. Förläng "pinnen" så att den kan linda över kanten på "päronet". Klipp ut formen från det smältande och ledande tyget och smält ihop den ena sidan av det ledande tyget. Ta bort stödet från smältmaterialet och smälta det till toppen av tyget som kommer att ligga på undersidan och botten av tyget som kommer att vara på toppen. Linda den extra biten runt toppen. Gå vidare till din symaskin och lägg batting med hål mellan det övre och nedre tyget. Sy utanför det ledande tyget och hoppa över "stick" -delen av omkopplaren. Jag fann att det är möjligt att sy det övre ledande tyget till botten och skapa en kort. Det är bättre att inte sy genom det ledande tyget. Fäst snaps och växlingen är klar. Jag tyckte att det var lättare att använda hanfästet för alla botten-/GND -anslutningar och honfästet för alla toppar. Detta gör alla omkopplare utbytbara. Kretsen: Saken med att skära rundor är att du har många extra bitar. Jag tog mina rester, smältade stora bitar av smältning till stora bitar av ledande tyg och använde dem för att klippa ut de mindre rektanglarna som jag använde som kuddar. Lägg ut dina strömbrytare grovt och säkra kuddarna till basen med tillräckligt med utrymme för att sy en linje till dem och få ett snäpp. Foten på symaskinen jag använde tog inte vänligt på att vara riktigt nära snap, så tänk på det och ge dig själv lite utrymme. Eftersom jag fick ledande tråd som kunde gå i min symaskin så sydde jag bara en linje från kudde till kudde och tillbaka. Jag var tvungen att gå långsamt annars skulle tråden gå sönder, men det var massor snabbare än handsömning. Även med ledande tråd på spolen och nålen fick jag en riktigt bra solid anslutning. Sakerna sliter som en galning, men lite hantverkslim eller Elmers rensar upp det. Försök att hålla linjerna långt borta från varandra och du ska inte ha några problem. Slutmontering: Klicka på alla dina switchar, anslut kortet, ladda koden och du är klar. Jag använde tråd för att ta mig från brädan till dynan och sydde sedan bara tråden till basen för hand. För nästa version kommer jag att montera brädet i en plastlåda med snäpp för att fästa det på basen så att lediga fingrar inte drar isär det.

Steg 8: Kod

Koda
Koda

Om du aldrig har programmerat ett chip tidigare är detta en lite skrämmande uppgift. Det hjälper inte att verktygen är fläckiga och för det mesta måste du utföra samma operation flera gånger. De två bästa resurserna jag har hittat för att få en förståelse för vad som händer är sidan för USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ och kraschkursen i programmering av brusleksaken, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Dessa bör kunna komma igång.

Många människor gillar Arduino för den här kodningen och det är inget fel med att använda den, förutom att jag känner att det ger mycket uppblåsthet till ett normalt enkelt program. Jag kände också C och känner inte till Arduino. Kanske en dag, om det finns tid.:) Kod: {{{#include // Använd en nål för att slå på SPK /// 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); // Ställ in SPK för utgång PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Ställ in knappen hög PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Ställ in timer medan (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); // Flip SPK Pin TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }}}}}}}} Var kommer platserna från? Lite matte behövdes. Timerklockan på atmega 168 går vid 1 MHz. Det är alldeles för snabbt för ljud så vi måste använda förskalaren /8. Eftersom vi sedan måste vända utgångsstiften högt sedan lågt för att göra en cykel, måste vi dividera svaret med 2 för att komma fram till rätt tonhöjd. Formeln ser ut så här, Pitch för att sätta in kod = (1000000/8)/(Målfrekvens*2) För A (440) skulle detta vara 125000/880 = 142,045 eller 142 för våra ändamål, eftersom värdet måste vara ett heltal. Målfrekvenserna för anteckningar kan hittas nästan var som helst online och är i allmänhet desamma. Jag vill fortfarande lägga till ett fallbesked istället för att använda en massa Ifs och använda PWM för att bättre styra volymen och tonhöjden på högtalaren, men för tillfället fungerar det.

Rekommenderad: