GP2Y0D810 е инфрачервен сензор с обхват до 10см. Необходимо му е напрежение от 2.7 до 6.2V и спокойно може да се захрани от Arduino. Връща сигнал с ниво HIGH или LOW, който се подава към някой от цифровите входове на микроконтролера.
Когато засече обект в обхвата си премивава в ниво LOW и за да сигнализираме това ще използваме светодиод. Микроконтролера събира информация за броя на обектите, преминавали в обхвата на сензора и връща броя им в Serial Monitor-а.

Свързване

Сензорът може да се използва с правата или ъглова рейка, включени в комплекта. Сигналът OUT се свързва към някой от входовете на Digital секцията. VIN и GND се свързват съответно към захранващо напрежение от 3.3 или 5V и към маса.
Съпротивлението в схемата на светодиода се изчислява според вида и яркостта му. Свързва се към анода(+) на светодиода и към някой от цифровите изходи на Arduino, отбелязан с ~ пред номера. Катода(-) се свързва към маса (GND)

Пример 1
/*
* Засича обекти в обхвата на сензора и сигнализира чрез светодиод
* Tihomir Trifonov (07-2011)
* с подкрепата на Robotev.com
*/
const int sensorPin = 12;// 12 е пина за OUT сигнала от сензора
const int ledPin = 5;// 5 е пина на анода на светодиода
int sensorState = 0; // съхранява състоянието на сензора
void setup() {
pinMode(ledPin, OUTPUT); // задава като изход пина на светодиода
pinMode(sensorPin, INPUT); // задава като вход пина на сензора
}
void loop(){
sensorState = digitalRead(sensorPin);// прочита състоянието на сензора
// и връща LOW ако има нещо в обхвата му
if (sensorState == LOW) { // проверява прочетеното състояние
digitalWrite(ledPin, HIGH); // светва светодиода, ако състояето е LOW
}
else {
digitalWrite(ledPin, LOW); //изгася светодиода, ако няма нищо в обхвата му
}
}
Пример 2
Този код добавя въможността обектите да бъдат броени и броят им да се види в Serial Monitor-а
/*
* Засича обекти в обхвата на сензора и сигнализира чрез светодиод
* Връща информация за броя им чрез серийна комуникация
* Tihomir Trifonov (07-2011)
* с подкрепата на Robotev.com
*/
const int sensorPin = 12;// 12 е пина за OUT сигнала от сензора
const int ledPin = 5;// 5 е пина на анода на светодиода
int sensorState = 0; // съхранява състоянието на сензора
int count=1; //съхранява броя на обектите, засечени от сензора
int last=1; // съхранява предпоследното състояние на сензора
void setup() {
pinMode(ledPin, OUTPUT); // задава като изход пина на светодиода
pinMode(sensorPin, INPUT); // задава като вход пина на сензора
Serial.begin(9600); // стартира серийна комуникация
}
void loop(){
sensorState = digitalRead(sensorPin);// прочита състоянието на сензора
// и връща LOW ако има нещо в обхвата му
if (sensorState == LOW) { // проверява прочетеното състояние
if( sensorState != last ){ // сравнява го с предпоследното състояние
digitalWrite(ledPin, HIGH); //светва светодиода, ако състояето е LOW
count++; // брои обектите попаднали в обхвата
Serial.print("\ncount = " );
Serial.print(count); //връща броя през Serial Monitor-а
}
}
else {
digitalWrite(ledPin, LOW); // изгася светодиода,
} // ако няма нищо в обхвата му
last = sensorState;// запазва състоянието на сензора
// за да се сравни със следващото
delay(10);
}
Ако всичко е наред със схемата и кода, то като поставим предмет на по-малко от 10см. от сензора, светодиода ще свети, а в Serial Monitor-а ще се изписва поредния номер на засечения обект.