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.
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.