Засичане на обекти чрез Ардуино и инфрачервен сензор

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

Share