Robottiohjelmoinnin harjoitustyö : Sensorit
NXT:n sensorien käyttö
Kosketussensori
![]() |
Kosketussensori on yksinkertainen nappi, jolla on kaksi tilaa (boolean-arvo). Napin keskiössä on akselin mentävä reikä, joka mahdollistaa napin painamisen välillisesti, esimerkiksi puskurin avulla. Nappi on kätevä törmäyksen tunnistamiseen ja robotin ohjaamiseen vaikkapa painalluksia laskemalla. |
TouchSensor touch = new TouchSensor(SensorPort.S1); // odota silmukassa kunnes nappia painetaan while (!touch.isPressed()); |
Äänisensori
![]() |
Äänisensori pystyy mittaamaan äänenpainetta, mutta ei valitettavasti taajuutta. Sensorille on silti jotain käyttöä, esimerkiksi havaitsemaan kovia ääniä tai tunnistamaan osuman. Arvo palautetaan prosentteina 0-100. |
SoundSensor sound = new SoundSensor(SensorPort.S2); // lue tämänhetkinen arvo muuttujaan int current = sound.readValue(); |
Valosensori
![]() |
Valosensorissa on ledi kohteen valaisua varten ja fotodiodi valoisuuden mittaamiseen. Värejä sensori ei suoranaisesti tunnista paitsi erilaisina harmaan sävyinä, riippuen valaistuksesta ja käytetyistä väreistä. Arvon voi lukea joko absoluuttisena (0-1023) tai prosentteina kalibroimalla sensorin ensin ympäristön matalimpaan ja korkeimpaan valoisuusarvoon. Valosensorilla on monia käyttökohteita, kuten pimeyden välttely, luukun sulkeutumisen havaitseminen, lattian sävyn tutkiminen, kahden pallon erottaminen toisistaan, ledillä vilkuttelu, jne. |
Lue arvo | LightSensor light = new LightSensor(SensorPort.S3); // lue raaka-arvo (0-1023) muuttujaan int current = light.readNormalizedValue(); // kalibroi . . . // lue valoisuus asteikolla 0-100% int cur_percent = light.readValue(); |
Kalibrointi | // näytä sensorille pimeä tässä Button.ENTER.waitForPressAndRelease(); light.calibrateLow(); // ja valoisa tässä Button.ENTER.waitForPressAndRelease(); light.calibrateHigh(); |
LED | // kytke ledi päälle light.setFloodlight(true); |
Ultraäänisensori
![]() |
Ultraäänisensori kaikuluotaa etäisyyttä kohteeseen ja ilmoittaa arvon senttimetreinä välillä 0-255 (255 jos kaikua ei saatu). Käytännössä sensorin tarkkuus on muutaman sentin luokkaa ja ulottuu pariin metriin. Jotta sensori havaitsee kohteen, pitää siitä saada kaiku, joten kovat esineet ja seinät on helpointa havaita, pehmolelu tai kukkakeppi ei niinkään. Sensorin voi asettaa luotaamaan jatkuvasti tai vain haluttaessa. Osa toiminnoista on hieman heikosti dokumentoituja. Jos ultraäänisensori ei tunnu toimivan jostain portista, kannattaa kokeilla eri portteja, koska jossain leJOSin versiossa on ollut bugi tähän liittyen. |
UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S4); // lue etäisyys sentteinä int distance = sonic.getDistance(); |
Kompassisensori (HiTechnic)
![]() |
Kompassi antaa suuntiman asteen tarkkuudella asteikolla 0-360. Sensori on hyvin herkkä ulkoisille magneettikentille ja toimiakseen hyvin pitää sijoittaa riittävän kauas moottoreista ja palikasta ja kaiken lisäksi mahdollisimman vaakasuoraan ja tukevasti, ettei se toiminnan aikana heiluisi. Pienetkin nykäisyt aiheuttavat suuren heiton lukemaan. Lukema päivittyy 100 kertaa sekunnissa.
Sensoria voi yrittää mukauttaa häiriötekijöihin asettamalla sen kalibrointitilaan ja pyörittämällä robottia noin kaksi kierrosta tasaisesti. Pyörittämistä on turha yrittää käsin. |
Lue kompassisuuntima
|
CompassSensor compass = new CompassSensor(SensorPort.S1); int angle = compass.getDegrees(); |
Lue nollattu suuntima
|
// kompassi nollataan nykyiseen suuntaan compass.resetCartesianZero(); // tehdään jotain . . . // luetaan muutos angle = compass.getDegreesCartesian(); |
Kalibrointi | // aseta robotti sopivalle nopeudelle (esim. 10s/kierros) // ja varmista että se voi pyöriä tasaisesti compass.startCalibration(); // laita robotti pyörimään 720 astetta . . . // lopeta kalibrointi compass.stopCalibration(); |