Arduino İle Işık Seviyesi Ölçümü

Ortamın ışık miktarını ölçebileceğiniz bir proje olan Arduino İle Işık Seviyesi Ölçümünü nasıl yapacağımızı şimdi sırası ile bakalım :

TSL2561 Digital Light Sensor ışık seviyesini ölçmenize yarıyor. Bu sensörün 7 dolar gibi bir ücreti var. Arduino uno başlangıç olarak yeterli olacaktır. Bir el feneri yardımıyla veya başka bir ışık kaynağını sensör üzerine getirerek ışığın seviyesini artırarak ölçüm yapabilirsiniz.

Sensör içerisinde photodiyot bulunuyor. Bunun sayesinde analog olarak değerleri arduinoya aktarabiliyor. Biraz kodları kurcalamayla diğer mikroişlemcilere de uygulayabilirsiniz. Arduino ile bir çok sensör çok rahatlıkla kullanılıyor. Ayrıca burda ki kodları anlayarak lcdnin çalışma mantığını anlayabilirsiniz.

Malzemeler:

Arduino uno

TSL2561 Digital light sensörü

16×2 LCD

LCD I2C / SPI Backpack

Arduino uno launchpad üzerinden beslemeyi alabilirsiniz ayrıca, diğer bağlantıları da kolayca launchpad üzerinden yapabilirsiniz bu size kolaylık sağlayacaktır. TSL2561 sadece 4 bacağını kullanacağız diğer 2 bacağı işimize yaramayacak. ADOR ve INT bacaklarını kullanmanıza gerek yok.

İlk önce ışık sensörünün bağlantılarını yapalım.

  • Sensör GND pini – siyah kablo – Arduino gnd pini
  • Sensör VCC pini – sarı kablo – Arduino 3.3v pini
  • Sensör SCL pini – yeşi kablo– Arduino analog pin 5 (i2c clock)
  • Sensör SDA pini – mavi kablo – Arduino analog pin 4 (i2c data)

LCD bağlantısı

  • LCD GND pin – siyah kablo – Arduino grnd pin
  • LCD 5V pin – kırmızı kablo – Arduino A5V pin
  • LCD LAT pin – turuncu kablo – Arduino digital pin 4 (SPI latch pin)
  • LCD  DAT pin – mavi kablo – Arduino digital pin 3 (SPI data pin)
  • LCD CLK pin – yeşil kablo – Arduino digital pin 2 (SPI clock pin)

Arduino Kodlarımız :

#include "Wire.h"
#include "LiquidCrystal.h"
#include "TSL2561.h"

// Connect via SPI. Data pin is #3, Clock is #2 and Latch is #4
LiquidCrystal lcd(3, 2, 4);

//! Light sensor configured to default i2c address.
TSL2561 tsl(TSL2561_ADDR_FLOAT); 

//! Buffer for printing light readings to the LCD.
char output_buffer[6];

//! Initialize the sketch.
void setup() {
  // Initialize the serial connection for debugging.
  Serial.begin(9600);
  Serial.println(F("Serial initialized"));
  
  // Initialize the LCD.
  lcd.begin(16, 2);
  Serial.println(F("LCD initialized"));
  lcd.setBacklight(HIGH);
  
  // Print the top line label.
  lcd.setCursor(0, 0);
  lcd.print(F("Vis:"));
  
  // Print the bottom line label.
  lcd.setCursor(0, 1);
  lcd.print(F("Lux:"));
    
  // Initialize the light sensor.
  if (tsl.begin()) {
    Serial.println(F("Sensor initialized"));
  } else {
    Serial.println(F("Sensor failed to initialize"));
  }

  // Measuring relatively bright light, so gain of 0 is reasonable
  tsl.setGain(TSL2561_GAIN_0X);
  
  // Measuring relatively bright light, so short sampling time is reasonable
  tsl.setTiming(TSL2561_INTEGRATIONTIME_13MS);
  
  // For low light level, comment out the above configuration and uncomment the below lines
  // tsl.setGain(TSL2561_GAIN_16X);
  // tsl.setTiming(TSL2561_INTEGRATIONTIME_402MS);
}

//! Main execution loop.
void loop() {
  // From the Adafruit TSL2561 Example sketch, get both IR and
  // full spectrum values in one read.
  uint32_t full_luminosity = tsl.getFullLuminosity();
  uint16_t ir_spectrum = full_luminosity >> 16;
  uint16_t full_spectrum = full_luminosity & 0xFFFF;
  
  // Set the cursor to the data column on the top line.
  lcd.setCursor(5, 0);
    
  // Format the output using a format string stored in program memory.
  snprintf_P(output_buffer, 6, PSTR("%5d"), (full_spectrum - ir_spectrum));
  
  // Print to the LCD.
  lcd.print(output_buffer);
  
  // Set the cursor to the data column on the bottom line.
  lcd.setCursor(5, 1);
  
  // Format the output using a format string stored in program memory.
  snprintf_P(output_buffer, 6, PSTR("%5d"), tsl.calculateLux(full_spectrum, ir_spectrum));

  // Print to the LCD.
  lcd.print(output_buffer);
  
  // 0.5 second delay to keep the display from being unreadable in edge conditions.
  delay(500);
}

 

Read More