Quantcast
Channel: Arduino Hacks » WS2812
Viewing all articles
Browse latest Browse all 2

LDR Object Counter

$
0
0

This is a more complex LDR based project. I decided to create a simple LDR object counter so as to show you how the LDR can be used in practical applications. It involves the use of other extra components such as a neopixel matrix, though don’t worry, there is a tutorial on that.

Requirements

  • LDR
  • 22k resistor
  • Arduino uno
  • WS2812b neopixel matrix

Setup

The setup is similar to that of controlling an LED using an LDR. However, in this case there is no LED and we are using a neopixel matrix.  Therefore, the setup will be similar but without the LED. The connection is as shown below.

arduino-LDR-counter

 

arduino-LDR

Code

#include <Adafruit_NeoPixel.h>

#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(256, PIN, NEO_GRB + NEO_KHZ800);

uint32_t color= strip.Color(68,0,0);
int tracker=0;
int prevNum=-1;
boolean object;
float sensorReading;  //analog pin reading

void setup()
{
  strip.begin();
  Serial.begin(9600);
  colorWipe(strip.Color(0,0,0));
  strip.show();
  
}
void loop()
{
  sensorReading=analogRead(0);  //get analog reading
  if (sensorReading<=700&&object)
  {
    object=false;
    tracker++;
  }
  else if (sensorReading>700&&!object)
  {
    object=true;
  }
  
  if (tracker==0&&prevNum!=0)
  {
    colorWipe(strip.Color(0,0,0));
    zero();
    prevNum=0;
  }
  else if (tracker==1&&prevNum!=1)
  {
    colorWipe(strip.Color(0,0,0));
    one();
    prevNum=1;
  }
  else if (tracker==2&&prevNum!=2)
  {
    colorWipe(strip.Color(0,0,0));
    two();
    prevNum=2;
  }
  else if (tracker==3&&prevNum!=3)
  {
    colorWipe(strip.Color(0,0,0));
    three();
    prevNum=3;
  }
  else if (tracker==4&&prevNum!=4)
  {
    colorWipe(strip.Color(0,0,0));
    four();
    prevNum=4;
  }
  else if (tracker==5&&prevNum!=5)
  {
    colorWipe(strip.Color(0,0,0));
    five();
    prevNum=5;
  }
  else if (tracker==6&&prevNum!=6)
  {
    colorWipe(strip.Color(0,0,0));
    six();
    prevNum=6;
  }
  else if (tracker==7&&prevNum!=7)
  {
    colorWipe(strip.Color(0,0,0));
    seven();
    prevNum=7;
  }
  else if (tracker==8&&prevNum!=8)
  {
    colorWipe(strip.Color(0,0,0));
    eight();
    prevNum=8;
  }
  else if (tracker==9&&prevNum!=9)
  {
    colorWipe(strip.Color(0,0,0));
    nine();
    prevNum=9;
  }
    
  Serial.println(sensorReading); 
  Serial.println(tracker);
  delay(1000);
}


void one()
{
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(112+i,color);
  strip.show();
}
void two()
{
  for(uint8_t i=0;i<9;i++)
  {
    strip.setPixelColor(192+i,color);
    strip.setPixelColor(215+i,color);
    strip.setPixelColor(39+i,color);
    strip.setPixelColor(48+i,color);
  }
  for(uint8_t i=0;i<15;i+=7)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  strip.show();
}
void three()
{
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(32+i,color);
  for(uint8_t i=0;i<15;i+=7)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(192+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(208+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  strip.show();
}
void four()
{
  int x=0;
  for(uint8_t i=0;i<22;i++)strip.setPixelColor(197+i,color);
  for(uint8_t i=0;i<26;i++)strip.setPixelColor(115+i,color);
  
  for(uint8_t i=1;i<11;i++)
  {
    if(i%2!=0)x+=20;
    else x+=12;
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(37+x+j,color);
  }
  strip.show();
}
void five()
{
  for(uint8_t i=0;i<9;i++)
  {
    strip.setPixelColor(199+i,color);
    strip.setPixelColor(208+i,color);
    strip.setPixelColor(32+i,color);
    strip.setPixelColor(55+i,color);
  }
  for(uint8_t i=0;i<15;i+=7)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  strip.show();
}

void six()
{
  for(uint8_t i=0;i<15;i+=7)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(192+i,color);
  for(uint8_t i=0;i<9;i++)
  {
    strip.setPixelColor(32+i,color);
    strip.setPixelColor(55+i,color);
  }
  strip.show();
}
void seven()
{
   int x=0;
   for(uint8_t i=0;i<32;i++)strip.setPixelColor(32+i,color);
   for(uint8_t i=1;i<11;i++)
  {
    if(i%2!=0)x+=2;
    else x+=30;
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(46+x+j,color);
  }
  strip.show();
}
void eight()
{
  for(uint8_t i=0;i<15;i+=7)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(192+i,color);
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(32+i,color);
  strip.show();
}
void nine()
{
  for(uint8_t i=0;i<15;i+=7)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(32+i,color);
  for(uint8_t i=0;i<9;i++)
  {
    strip.setPixelColor(199+i,color);
    strip.setPixelColor(208+i,color);
  }
  strip.show();
}
void zero()
{
  for(uint8_t i=0;i<15;i+=14)
  {
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(64+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(80+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(96+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(112+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(128+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(144+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(160+j+i,color);
    for(uint8_t j=0;j<2;j++)strip.setPixelColor(176+j+i,color);
  }
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(32+i,color);
  for(uint8_t i=0;i<32;i++)strip.setPixelColor(192+i,color);
  
  strip.show();
}
void colorWipe(uint32_t colour)
{
  for(int i=0;i<256;i++)strip.setPixelColor(i,colour);
}

 

I lifted the neopixel matrix number procedures from my previous tutorial Wifi controlled LED display.

Video


The LDR object counter is just one of the many applications of the LDR. However, for more accurate results, you must have an enclosure and a non-fluctuating light source.

Related Links:

The post LDR Object Counter appeared first on Arduino Hacks.


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images