Robottiohjelmoinnin harjoitustyö : Sensorit

 

NXT:n sensorien käyttö

 

Kosketussensori

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.

 

 

Esimerkkejä

TouchSensor touch = new TouchSensor(SensorPort.S1);
// odota silmukassa kunnes nappia painetaan
while (!touch.isPressed());

 

Äänisensori

Ää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.

Esimerkkejä

SoundSensor sound = new SoundSensor(SensorPort.S2);
// lue tämänhetkinen arvo muuttujaan
int current = sound.readValue();

 

Valosensori

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.

Esimerkkejä

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

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.

Esimerkkejä

UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S4);
// lue etäisyys sentteinä
int distance = sonic.getDistance();

 

Kompassisensori (HiTechnic)

Kompassisensori

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.

  • robotin pitää pystyä kääntymään tasaisesti saadakseen tarkkoja arvoja liikkeessä

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.

Esimerkkejä

Lue kompassisuuntima
  • myötäpäivään kasvava, 0-360
CompassSensor compass = new CompassSensor(SensorPort.S1);
int angle = compass.getDegrees();

Lue nollattu suuntima
  • vastapäivään kasvava, 0-360
// 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();

 

 

Lisätietoa

GPS Sensor for Lego NXT - pdf