Dato: 17. september 2009
Øvelsens varighed: 3 timer
Gruppemedlemmer: Annette, Samuel og Rasmus
Mål:
Målet for denne uges øvelse er at undersøge NXT’s lydsensor.
Baggrundsinfo:
Datalogger:
A data logger, [1], is a mechanisme that can be used to collect and record data from e.g. a sensor for later inspection. In the leJOS system a data logger can be implemented to collect data and record them in a flash file. An example of a simple data logger is DataLogger.java. By means of this data logger e.g. sound data can be collected and recorded in a file Sample.txt as shown in the data collection program SoundSampling.java. The data in the file can then be transfered to the PC by means of the tool nxjbrowse. The sampled data can then be used to plot a graph of the sound level data.
Fra øvelsesoplægget: http://www.legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson3.dir/Lesson.html
Fremgangsmåde:
Fremgangsmåde:
Lydsensoren monteres på den robot vi har brugt til de andre øvelser i stedet for den soniske sensor.
Der skrives en simpel kode til at teste soundsensoren. Den læser kontinuerligt værdier fra sensoren om lyden og skriver værdien på displayet. Der prøves med forskellige lyde og forskellige afstande.
Der laves en simpel test af SoundSampling programmet for at finde ud af hvordan værdierne bliver gemt. Det sørger for som beskrevet under baggrundsinfo, at sample sensorværdier, i koden er intervallet sat til 5ms. Den skriver derefter værdien i en txt fil – værdierne er separeret med komma med tyve værdier på hver linje. Programmet startes og vi klapper en enkelt gang og stopper programmet, efterfølgende downloades txt filen med NXJ File Browser til en PC. Denne test foretages to gange.
SoundCtrCar er et program der får bilen til at udføre en bestemt sekvens af handlinger når der klappes. Vi undersøger hvad disse handlinger er.
Resultater:
SoundSensorTest
Der er en konstant baggrundsstøj i lokalet hvor vi sidder med de andre grupper på mellem 3-10% og nogle gange helt op til 17%.
For at slippe for baggrundsstøjen fra de andre gruppers tests stillede vi robotten op i et andet rum og lukkede døren. Her prøvede vi at klappe og tale foran mikrofonen.
Intervallet mellem hver måling er på 100ms. Ved at klappe i hænderne lige foran mikrofonen kan vi udlæse en maksimal værdi på 93%. 2.5m væk prøvede vi igen at klappe direkte i mikrofonens retning og her kunne vi også komme op på 93%
Vi prøvede også en enkelt gang med en "bip" lyd fra en mobiltelefon. Den kunne dog ikke registreres på længere afstand fordi lydstyrken var for svag.
Det har ikke umiddelbart stor betydning om lydkilden, når det er klap i hænderne kommer et lille stykke væk, men vi har observeret under vores forsøg at mikrofonen er meget retningsbestemt. Lydkilden skal helst være placeret ret præcist den vej mikrofonen peger.
SoundSampling
Med SoundSampling projektet er det muligt at sample fx et klap og gemme værdierne i en txt fil. For at visualisere dataene på en overskuelig måde laves grafer i matematikprogrammet GNU Octave. Så er det dog nødvendigt at gemme dataene i txt filen med en værdi på hver linje der ikke er separeret med komma. Ændringen for at skrive værdier til txt filen på hver linje uden komma består ganske simpelt af at udkommentere linjen hvor kommaerne tilføjes og konstanten itemsPerLine ændres fra 20 til 1. Begge ændringer foretages i DataLogger.java filen.
På de to kurver på grafen ser vi tydeligt de to klap et stykke henne ad x-aksen. X-aksen er samples og y-aksen viser lydstyrken i procent. Vi vil gerne vide hvor længe et klap varer og da vi kender samplingstiden som er 5ms er det simpelt at omregne det. Vi ganger værdierne med 5 og får så tiden i ms.
Det første klap varer:
(228-121)*5 = 535ms
(442-310)*5 = 660ms
Dette ligner nogenlunde det Sivan Toledos er kommet frem til i hans forsøg ( http://www.tau.ac.il/~stoledo/lego/ClapCounter/ ).
Yderligere ses på grafen at begge logninger indeholder nogle ret høje værdier for lydstyrken i starten af målingen. For begge målinger ser det meget ens ud. Vi har prøvet at læse raw values fra soundsensoren for at se om det på en eller anden måde kan skyldes den omregning der er fra raw values til de procentværdier vi opnåede i de før beskrevne målinger. Det viser sig at problemet også er der ved raw values, så hvad det skyldes ved vi ikke, og vi vil ikke forfølge det yderligere, men en måde at omgå dette er at forsinke målingen, sådan at der går et kort stykke tid mellem at sensoren aktiveres og til at man begynder at måle.
SoundCtrCar.java.
Ved programmets start, står robotten stille. Når den opfanger en høj lyd, som for eksempel et klap begynder den at køre lige fremad. Det gør den indtil den opfanger endnu en høj lyd. Når det sker begynder den at dreje med uret rundt om sig selv. Når endnu en høj lyd opfattes, skifter den til at dreje i den modsatte retning, altså mod uret, rundt om sig selv. Efter en sidste høj lyd, står den stille og er klar til at begynder forfra igen med at køre lige fremad.
For at gøre det muligt at stoppe programmet igen har vi sat en test ind i den indre do while loop, så der også her reageres på om escape knappen er aktiveret.
Bilen ændrer ikke kørsel ved råb, og det er nok fordi at lydniveauet er for lavt.
Lyden skal også være høj for at bilen reagerer på den. Det viser sig at tærsklen er sat til 90 i programmet og det er højt og når robotten kører rundt på gulvet var det også indimellem svært at få den til at reagere på klap når det er i ståhøjde. Hvis tærsklen sættes ned til 55 er den meget mere modtagelig for at man klapper og man kan endda kontrollere den ved at snakke til den. Man skal hæve stemmen lidt for at den reagerer, men det virker.
Konklusion:
SoundSensorTest
Med denne test kunne vi konkludere at afstanden til lydkilden ikke har den store betydning så længe at mikrofonen peger præcist i retning af lydkilden.
SoundSampling
Vi fik samplet lyden af et klap og værdierne overført til en txt fil. Ved at ændre en smule i koden blev formatet tilpasset læsning fra matematikprogrammet GNU Octave, der skal have en fil der ikke er separeret med komma og med en værdi på hver linje. Tiden for et klap blev sammenlignet med resultatet af Sivan Toledos undersøgelser og der er god overensstemmelse.
SoundCtrCar
Afprøvning af robotten med SoundCtrCar projektet viste at den udførte sekvens er at robotten ved første høje lyd kører lige fremad, anden høje lyd begynder den at dreje med uret om sig selv, tredje høje lyd resulterer i at den kører mod uret om sig selv og fjerde at den stopper. Efterfølgende er den klar til at køre sekvensen forfra. Ved at sætte tærsklen for lyden ned er det ikke nødvendigt med høje klap længere for at få robotten til at reagere den reagerer nu også på stemmer.
Referencer:
Øvelsesoplægget til øvelse 3: http://www.legolab.cs.au.dk/DigitalControl.dir/NXT/Lesson3.dir/Lesson.html
Egen SoundSensorTest kode:
http://www.daimi.au.dk/~u071252/DL/SoundSensorTest.java
Koden til SoundSampling projektet af Ole Caprani: SoundSampling.java og DataLogger.java.
Koden til SoundCtrCar projektet af Ole Caprani: SoundCtrCar.java og Car.java
torsdag den 24. september 2009
Abonner på:
Kommentarer til indlægget (Atom)
Ingen kommentarer:
Send en kommentar