Numarator impulsuri cu senzor infrarosu

In acest articol vom folosi un senzor infrarosu pentru a face cu el un numarator digital. Pentru acest lucru vom folosi urmatorul senzor:

 

Acest senzor contine un emitator IR si un foto-tranzistor. El se alimenteaza la 5V si pe pinul de iesire livreaza un semnal LOW cand nu avem nici un obiect intre emitator si receptor si un semnal HIGH cand lumina IR este obturata.

Pentru a vizualiza usor numarul de citiri vom folosi un display LCD 2004. Acesta a fost conectat conform schemei din acest articol dar am conectat o parte din pini la D9, D8, D7 si D6 in loc de D5, D4, D3 si D2.

Iesirea senzorului a fost conectata la pinul D3 iar intre pinul D2 si +5V am conectat un intrerupator pentru resetarea valorii citite.

 Sketchul folosit este urmatorul:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 9, 8, 7, 6);
int numar = 3;
int buton = 2;
int i = 0;
int z = 1;

void setup() {
  pinMode (numar, INPUT);
  pinMode (buton, INPUT);
  lcd.begin(16,4);
   lcd.setCursor ( 0, 0 ); 
  lcd.print (" www.");  
  lcd.setCursor (0, 1 ); 
  lcd.print ("electronicstore");
  lcd.setCursor (0, 2 );
  lcd.print ("            .ro");
  lcd.setCursor (0, 3 );
  lcd.print ("****************");
  delay (2000);
  lcd.clear();
  lcd.setCursor ( 0, 0 );
  lcd.print ("numarator");
  lcd.setCursor (0, 1 );
  lcd.print ("imulsuri");
  lcd.setCursor (0, 2 );
  lcd.print ("cu infrarosu");
  delay (2000);
  lcd.clear();
}

void loop() {
   int val = digitalRead(numar);
  if (val == HIGH) {
    if (z == 0) {
      i = i+1; 
      z = 1;
    }
    } else { z = 0; }
    int res = digitalRead(buton);
    if (res == 1) { 
      i = 0;
      lcd.setCursor(0, 1);
      lcd.print("Resetat...");
      delay(10);
      lcd.setCursor(0, 1);
      lcd.print("                ");
    }
    lcd.setCursor ( 0, 0 );
    lcd.print ("Valoare citita:");
    lcd.setCursor(0, 1);
    lcd.print(i);
  
}

 Un filmulet cu montajul in functiune este mai jos:

  

Autentificare