En kartong televisor (med arduino och lysdioder) (11 / 14 steg)

Steg 11: Konvertera bilder till ljud!




För att spela något på televisor, en bild (film består av separata bilder) måste anpassas till varierande låg intensitet av lysdioder inuti televisor.

Som varje hål igenom fönstret, bestämmer varierande intensitet av lysdioderna intensiteten på just den platsen var ett hål ligger just nu. Bilden är bildad rad för rad.

Jag har redan sagt att intensiteten av lysdioderna kommer att kontrolleras som en ljudenhet. Detta är bara helt enkelt ljud kommer från hörlursuttaget på min laptop till en förstärkare till LED. (mer om det senare)
Så behöver programmet konvertera vithet av raderna till en spänning i audioutgången på min laptop.
I princip en fil måste skapas och spelade, det är så enkelt.

För att göra detta, en bild tas och indelad i 24 kolumner (var och en representerar ett hål som passerar genom fönstret). Varje rad är sedan omvandlas till en gråskala bild.
Vithet eller intensitet beräknas så här:

Varje pixel har en röd, grön och blå värde, tillsammans bildar de den specifika färgen du se. För att konvertera dessa röda, uppfattas gröna och blå värden till den allmänna intensiteten från ögat, används följande formel:

intensitet = 0,29 * röd + 0.71 * grön + 0.08 * blå.

Detta beror på att ögat känslighet varierar för olika färger. (Även notera att det finns 2 formler i wikipedia-artikeln, men sedan kom jag på den andra en det mesta, som är den jag använder. Och det bestämdes för användning i TV så det är mest lämpligt (men det spelar ingen roll som en av två används, det finns inte mycket skillnad)
Obs att jag omedelbart lagrar intensiteten i en array "shorts" beror på att en kort är 2 byte eller 16 bitar lång vilket är den resolution som jag använder för min wav-fil.

Nu finns det 24 matriser av stödnivåer som måste sättas i en WAV-fil. Beroende på prov hastighet, är dessa matriser i papperskorgen.
T.ex. att bygga min WAV-fil, jag vill spela det på en prov hastighet på 44100 Hz vilket är den vanligaste samplingsfrekvensen. Och skivan tar 1/12 sekunder att kretsa. Och varje hål igenom fönstret under den period som skivan ska rotera 14.8 grader, så en 14,8/360 del av en rotation. Så, helt enkelt följande formel används:

amount_bins = SPS * (Rotationperiod) * (del av rotation ett hål syns)

Detta uppgår till 151 (rundad) lagerplatser i mitt fall.
Så, enkelt uttryckt, bilden är nu uppdelad i 151 rader och 24 kolumner. Och alla delar är genomsnitt internt så du hamnar med en gråskala bild 24 av 151 pixlar.

Från denna konverterade bilden 24 rader (var och en en siffermatris 151) sedan sys ihop efter varandra att bilda en matris med 24 * 151 = 3624 nummer eller prover. När dessa data sätts i WAV-fil, kommer det spela upp ljudet som behövs för att producera en bild.

MEN, en rotation av skivan tar 1/12 av en sekund och med en frekvens på 44100 Hz detta står att 3675 prover. Så, ser du att det finns 51 nummer inte används. Och detta är helt bra eftersom det är bara den lilla bit av oanvänt utrymme på skivan om du tittar på mallen hålet positioner på en av de första stegen.

Detta är i princip alla viktiga saker.
Uppgifterna är nu helt enkelt i en WAV-fil. Jag hänvisar till denna sida på WAV ljudfil format att veta i detalj arrangemangen för byte. Du känner tydligt igen allt från sidan i funktionen makeWav() (och printInfo() fuction) i filen "wavreader.cpp". Jag bara helt enkelt binära ut alla saker de säger.

Vad du sluta med är en ljudfil. Om skivan från televisor är spunnen upp till rätt hastighet och ljudfilen spelas (löpande en 1000 gånger för enkel) och sedan bilden kan ses tydligt skumma över skärmen.

Så, först och främst för själva programmet jag använder Magick ++ eftersom ImageMagick är otroligt kraftfull och lätt att använda. Det gladde mig mycket att det också gav en bild redigerande bibliotek för C++ kallas Magick ++.
Alla läsa och skriva av pixlar var klar med detta bibliotek. Det finns en hel del förklaring om hur du installerar och använder den på deras huvudsidan för linux, mac och windows.

För det andra jag en gammal liten bit torsk som jag har skrivit för länge sedan. Jag ville läsa data från en WAV-fil så jag skrev en wavreader. Se upp att det är några smutsiga kod (kom ihåg varningar). Det är en blandning av C och C++, det fungerar bra men det är inte rätt.
Problemet var (och är fortfarande) som jag inte vet hur jag kan ha en fstream som medlem i en klass. Eller något lätt att permanent minns vad placera det på i en fil. Så jag gick C stil och används en enkel fil pekare.

Så, jag använder Linux och detta är kommandot kompilera som fungerar:

g ++-O3 -o bild main.cpp wavreader.cpp "Magick ++-config--cppflags--cxxflags--ldflags--libs'

(om du prova det, du ser 3 varningar att några returnera värden ignoreras, det är inte att dåligt, bara lösa dem lägger till några (för mig) värdelösa saker till vissa riktigt små funktioner). (och - O3 är lite för hastighet, men det spelar ingen roll eftersom jag inte har provat detta program med stora partier av bilder)

Naturligtvis kan du använda din favorit GUI bara se upp att det inte är en normal flagga. Jag har aldrig sett detta tidigare, men Magick ++-config är något som automatiskt skriver ut flaggor därav den "" symboler.
Och i qtCreator har du till exempel lägga till denna rad i filen pro:
QMAKE_CXXFLAGS += $$ system (magiska ++-config--cxxflags--cppflags)
(vilket är konstigt, det är därför jag gjorde det det i Codeblocks där du kan bara lägga till saker bokstavligen som det visas i kommandot kompilera)

Att faktiskt använda programmet skriver du bara:

. / bild Saturn.jpg

(som är i mitt fall



från wikipedia) Efter en kvart av en sekund eller så returneras bilden ovan sidan med ljudfilen (nedan).
Titta på bilden av ljudfilen i ljud, kan du tydligt erkänna den vänstra sidan av ringen i de dubbla topparna! (Saturn.wav)

Om du ger två bilder som argument, programmet stygn dem tillsammans automatiskt: (och namn WAV som första argument)
t.ex.

. / bild Saturn.jpg face.jpg

(ansiktet var som från René från ' Allo ' Allo!)
Detta ger sedan efter wav-fil: (igen heter Saturn.wav)

Men för att demonstrera funktionerna i denna lilla program låter undersöka detta gif: (fick den från här)
Du kan sedan få med Imagemagick alla separata ramar. Om du placera dem i en mapp och släppa lös programmet bild på dem får du ett gäng konverterade bilder som du kan göra en ny gif:

(Jag har konverterat alla konverterade bilderna tillbaka tillsammans i en gif, detta sker inte automatiskt)
Men viktigare programmet returnerar också hela wav-fil där du kan se ett utdrag nedan. Du känner lätt igen de separata ramarna. (det är inzoomad)

Något konstigt att jag inte kan förklara omedelbart är att det inte fungerar med bilder redan i gråskalor.
Även om stora delar av helt vita eller helt svarta pixlar är närvarande, fungerar det eiter.

Uppdatering: Om alla ovanstående är lite alltför teknisk, eller om du har problem med att sammanställa eller installera biblioteken, jag har lagt till körbara i en zip nedan. (så, packa upp och köra det om du litar på mig)
Dock har jag märkt att det inte fungerar i windows, vilket är irriterande. Det är inte så trivialt som jag trodde det skulle vara.

Se Steg
Relaterade Ämnen

Multiplexering med Arduino och 74HC595

74HC595 är en lätt och billig (på cirka 60 cent styck) sätt att öka antalet digitala ut stiften på din Arduino. I denna tutorial ska jag visa dig hur man kör upp till 16 lysdioder med en 74HC595 med hjälp av en teknik som kallas multiplexing. I slutä...

Säkerhetssystem och tillgång kontroll med Arduino och RFID-

säkerhetssystem och tillgång kontroll med Arduino och RFIDDetta projekt är en evolotuin av mitt första projekt kallat "Arduino - Security System och Access Control"Som ni kan se på bloggen http://arduinobymyself.blogspot.com.br/2012/03/arduino-s...

Ledde Star med Arduino och WS2811 Neopixels

BeskrivningDenna lilla projekt gör en stor prydnad att hänga i fönstret i juletid. Det är en 20" brett stjärna med 50"neopixel"lysdioder i ytterkanten. Varje led är individuellt adresserbara och kontrolleras av en arduino anordning som kan...

Styra din Tv, Dvd och ljud system med Arduino och Android

Hej alla, detta är min andra instructable och min första på engelska, så, ledsen för misstag.Jag vill dela detta projekt det handlar om hur du kan styra din Tv, DVD och ljudanläggningen med Arduino och en app för Android med app inventor.Om du gillar...

Kontrollera en RGB ledde med Arduino och bearbetning

detta instructable (min första inte mindre) visar hur man styr en RGB ledde med bearbetning och arduino.Den viktiga funktionen att vara färg markeras genom att klicka på en bild, RGB-värdet för den pixel du klickar på bearbetas och skickas till den a...

Mugg musik: Förvandla vatten till ett Instrument med Arduino och ChucK

Vad händer om du slå alla ledande yta till ett instrument? Gillar, säga... en mugg vatten? Bäst av allt, är det billigt; du behöver bara $1 värt extra elektriska komponenter (inte inklusive Arduino).För detta projekt, min vän skörd och jag kombinerad...

Hur använder gamla Stepper Motors med Arduino och A4988 Driver

Jag har varit med stegmotorer ett tag nu, och de är fantastiska för alla typer av robotic projekt.Idag kommer jag att dela de saker jag har lärt mig hittills om återanvända gamla stegmotorer bärgades från skrivare. Identifiera stegmotorerStegmotorer...

Power övervakning med Arduino och logga in i Google blad

Sedan senaste veckorna tänkte jag på att göra ett projekt som kan hjälpa mig att hålla ett spår på min dagliga energi användningsområden. I detta projekt använder jag en 30A övervakning styrelse. denna styrelse har 6 strömsensor som kan läsa upp till...

Roligt spel med arduino och bearbetning

Denna tutorial ska show dig hur man gör en första person FPS-shooter i bearbetning med hjälp av en arduino. Detta projekt lämnades till oss som en avslutande tentamen i en teknisk specialkurs, (gymnasieskolan).Video av projektet! :) (Svårt att spela...

Kontroll av en DC motor med Arduino och Visual Basic

Hej vänner detta är mitt första inlägg i instructables.com där jag kommer att försöka ge mer nyhet des ofta.Idag är temat med Arduino och Visual Basic.Det projekt som vi ser idag är controller en dc-motor med Arduino och Visual Basic.För att styra en...

Rörelseaktiverade ljus med Arduino och HC-SR04 sensor

Jag gjorde detta projekt för länge sedan att tända upp i köket när jag öppnar bakdörren.Tanken var när jag öppnar bakdörren, detta ljus som tänds under 15 sekunder och som ger mig tillräckligt med tid att nå strömbrytaren på den motsatta väggen. Före...

Kapacitans mätare med arduino och 555 timer

KAPACITANS MÄTARE MED ARDUINO OCH 555 TIMER CHIPDetta projekt syftar till att bygga en enkel kapacitans mätare, en enhet för att mäta kapacitans i nanoFarads och microFarad, med en räckvidd på ca 1 nanoFarad till hundratals microFarads.Detta projekt,...

Kontrollera en LED med arduino och Wifly sköld

För att visa hur du kan styra enheter via wifi med hjälp av arduino wifly shield, kommer jag slå på och av en LED genom att skicka en http-begäran från webbläsaren till wifly sköld.Krav:1. Arduino uno2. Wifly sköld3. ledde4. 220 ohm motstånd5. ett pa...

Hur man styr motorer med Arduino och RC mottagare i 10 minuter

Detta är min andra handledning på att kontrollera saker med Arduino och R/C-mottagare. Om du inte har tittat på min första tutorial jag föreslår att du tittar på det första, här: i den här guiden kommer vi att titta på hur man styr motorer också anvä...

Styra DC Motors(PC Fans) med Arduino och Relay board

I detta instructable kommer vi att se utan att gå in i detalj, hur man använder 12V DC motorer (PC Fans) med Arduino och relay board eBlockSteg 1: Konfigurera maskinvara och programvara För att göra det behöver vi viss maskinvara kan du hitta på Inte...

Kontrollerar ledde med Arduino och C#

Hej vänner detta är min första Arduino Tutorial på att kontrollera ett LED med Arduino och C#-program.Du behöverArduinoen1K ResistorLEDProgramvaraArduino programvara - www.arduino.ccMicrosoft visual C# / Visual StudioLED är ansluten till Pin 13.Titta...

Spela upp ljud på dator med arduino och progduino

Idag kommer jag visa dig hur lätt det är att bygga en enkel spelare och kör det på datorn med arduino och progduino.Läs mer om progduino: http://www.progduino.comSteg 1: Arduino kod - spelaren på din dator.Kopiera koden till din arduino redaktör.void...

DIY virtuell verklighet Skateboard erfarenhet med Arduino och Google kartong

Detta är ett riktigt roligt och enkelt projekt som kan göras ungefär en timme. På botten av skateboard är en accelerometer/gyro med en Arduino ombord som överför kantiga rörelse i styrelsen via bluetooth till en liten virtuell verklighet spel jag gjo...

Piano trappor med Arduino och Raspberry Pi

Vem älskar inte musik? Dessa Piano trappor är en interaktiv och relativt smidig musikaliska installation som kan tillämpas på i princip alla trapphus. Jag byggde dem för HackPrinceton tillsammans med mina vänner Erica Portnoy och Vincent Castaneda, o...