Sharp GP2Y0A21YK infravörös távolságszenzor:
Ez a szenzor háromszögeléses módszerrel működik. Egy keskeny infravörös fényt bocsát ki, ami visszaverődik a tárgyakról. Ezt egy érzékelő egy optikával leképezi egy CCD-re. A távolságtól függően más szögben érkezik meg a visszavert fény, tehát más CCD pixelre érkezik, ebből számolja ki a tárgy távolságát.
Kód:
/*
Sharp infra távolságszenzor, RGB LED-del.
Több változót definíálunk, és külön írjuk le a fügvényeket.
*/
int avgFactor = 5; //meghatározza a kiolvasások számát, a többszöri kiolvasás lassabb, de pontosabb
int runningTotal;
int distRead;
int distAvg; //kiolvasott távolság átlaga
int i;
int ledR = 9; // piros
int ledB = 10; // kék
int ledG = 11; // zöld
int sharpIR = 2; // Sharp IRED kimenet az Analog 2 pin
void setup()
{
Serial.begin(9600);
testLED(); //függvény, minden szín fél másodpercet világít majd kikapcsol
}
void loop()
{
runningTotal = 0;
distRead = 0;
distAvg = 0;
getDist(); //integer, szenzorból kilvasott számérték
colorLEDs(distAvg); //függvény
}
//==========================================================================================
// FÜGGVÉNYEK
//==========================================================================================
//==========================================================================================
// kiolvassuk a távolságot a Sharp infravörös szenzorból
//==========================================================================================
int getDist()
{
for (i=0; i < avgFactor; i++)
{
distRead = analogRead(sharpIR);
runningTotal += distRead;
//// kimenet megállapítása:
//Serial.print("i = ");
//Serial.println(i, DEC);
//Serial.print("runningTotal = ");
//Serial.println(runningTotal, DEC);
}
distAvg = (runningTotal / avgFactor);
//// kimenet megállapítása:
//Serial.print("distAvg = ");
//Serial.println(distAvg, DEC);
return distAvg;
}
//==========================================================================================
// függvény: ami a távolság függvényében változtatja a színt
//==========================================================================================
void colorLEDs(int)
{
if (distAvg >= 500) //ha a távolság > 500 bekapcsolja a pirosat
{
redLED();
}
else if ((distAvg >= 200) && (distAvg < 500)) //ha 200 < távolság > 500, sárgát bekapcsolja
{
yellowLED();
}
else if (distAvg < 200) //ha a távolság < 199, akkor a zöldet bekapcsolja
{
greenLED();
}
}
//==========================================================================================
// függvény: teszt, mindegyik szín fél másodpercig ég:
//==========================================================================================
void testLED()
{
redLED();
delay(500);
yellowLED();
delay(500);
greenLED();
delay(500);
offLED();
}
//======================================
// LED szín függvények
//======================================
// piros világít
void redLED() {
analogWrite(ledR, 0);
analogWrite(ledB, 255);
analogWrite(ledG, 255);
}
// sárga világít
void yellowLED() {
analogWrite(ledR, 70);
analogWrite(ledB, 240);
analogWrite(ledG, 10);
}
// zöld világít
void greenLED() {
analogWrite(ledR, 255);
analogWrite(ledB, 255);
analogWrite(ledG, 0);
}
// kikapcsol:
void offLED() {
analogWrite(ledR, 255);
analogWrite(ledG, 255);
analogWrite(ledB, 255);
}