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-а ще се изписва поредния номер на засечения обект.