fredag den 21. september 2007

ESEA - Labnotes



NXT Programmering - Lektion 3

varighed: 4 timer - kl. 09.00 - 13.00
gruppemedlemmer: Aslak, Ruben og Lars

Målet for i dag var at komme hurtigt igang med arbejdet med lydsensoren (mikrofonen) og dermed hurtigt komme i gang med programmet til den klap-styrede bil. Hjemmefra var der blevet forberedt en test af mikrofonen, baseret på koden fra forrige lektion ('SonicSensorTest.java').

Desværre var der fra starten problemer med Lars' computer og installationen af Java og Eclipse. Computeren kunne ikke kommunikere med NXT'en, noget som også drillede lidt under forrige lektion. Der endte med at gå en hel time tabt, inden vi havde givet op og begyndte at bruge Aslaks computer istedet. Der virkede kommunikationen fint, og vi påbegyndte dagens arbejde.

Først oprettes en ny klasse 'MicrophoneTest.java', baseret på den kode, som var lavet hjemmefra (se forrige afsnit). Denne blev uploadet til NXT'en og vi diskuterede brugen af 'klap' til at teste med. Vi blev enige om, at det er for svært at klappe ensartet gentagne gange, og vi lavede en Matlab funktion, som danner og afspiller en 1000 Hz tone med en varighed på 3 sekunder. Vi udførte en test af mikrofonen med en opstilling, hvor NXT'en, monteret på 'bilen', stod på gulvet i et åbent område, med den pc som afspiller lyden placeret på en kasse, umiddelbart udfor mikrofonen. Testopstillingen vises på følgende billeder.




Resultatet af denne test vises på følgende graf:

Som det fremgår af grafen er målingerne ikke helt enstydige. Dette kan skyldes flere ting. Den første måling, ved en afstand mellem mikrofonen og pc'ens højttaler på 20 cm, forekommer det målte lydniveau for lavt (sammenlignet med lydniveauet ved 40 cm). Dette kan forklares med en antagelse om, at mikrofonen har en meget retningsafhængig response. Ved den første måling står pc'ens højttaler faktisk hævet over mikrofonens fysiske niveau. Derfor vil meget af lyden, efter vores antagelse, udbrede sig "hen over" mikrofonen. De andre ulineariteter kan forklares ved uforudsiglige refleksioner og ved at omgivelserne ikke er fuldstændig konstante, hverken i lydniveau eller i fysisk udseende (vi stod ikke altid på helt samme position). Dog viser figuren en tydelig tendens og viser at det målte lydniveau falder som funktion af afstanden.

Næste punkt var en kørsel af 'SoundCtrCar.java'. Dette program benytter mikrofonen og giver bilen en forudbestemt opførsel afhængigt af de lyde som måtte blive registreret. Koden opererer med en tærskelværdi, som kan ændres efter omstændighederne og benytter klassen 'Locomotion.java', som også blev omtalt under forrige lektion. Ved starten er denne tærskel sat til et lydniveau på 90. Efter opstart begyner bilen at bevæge sig fremad, og fortsætter med dette, indtil en lyd, hvis niveau overstiger tærskelværdien indtræffer. Herefter drejer bilen til venstre, og fortsætter med dette, indtil en lyd, som overstiger tærskelværdien indtræffer. Herefter drejer bilen til højre, og igen indtil en lyd overstiger tærskelværdien. Slutteligt holder bilen stille, og fortsætter med at holde stille indtil den gentager hele bevægelsesmønstret, når en lyd overstiger tærskelværdien endnu engang. Dette kan så fortsætte i det uendelige, eller indtil batteriet løber tørt.

En anden måde at afslutte det omtalte program 'SoundCtrCar.java' er ved at trykke på 'escape'-knappen, men dette fungerer udelukkende, når eksekveringen af koden befinder sig i den yderste while-løkke. Trykkes der på 'escape' imens NXT'en er igang med at eksekvere en af de indre while-løkker, f.eks. at dreje til højre, sker der ingenting. For at kunne stoppe NXT'en på alle tidspunkter af kode-afviklingen, implementerede vi først den "grimme" måde, som vi valgte at kalde den. Den "grimme" måde er, at de indre while-løkker i koden bliver tilføjet en if-sætning, som tester om 'escape' er aktiveret. Er knappen aktiveret, stopper eksekveringen af koden.

Som sidste opgave i dag, arbejdede vi med at implementere en klap-tæller (clap counter), som, på baggrund af vores kendskab til de akustiske aspekter af en lyd af denne type, tæller antallet af disse. Desværre nåede denne kode ikke at blive færdiggjort. Gruppens medlemmer vil forsøge, at arbejde videre på denne kode inden næste lektion.

Afslutningsvis kan det nævnes at den forulykkede pc stadig, ved lab-sessionens afslutning, ikke fungerer mht. kommunikation ml. pc og NXT. Det forventes at det kan være Java, eller Eclipse, som ikke fungerer. Muligvis vil dette også blive rettet op på inden næste lektion.

Ingen kommentarer: