This project is about making portable luxmeter. It can be used in schools, where children can measure different kinds of light sources.
Functions:
1. measure intensity of light in lux.
2. calculate solar irradiation from lux to watts/m2 (factor 112)
3. charging battery using USB port
Total cost is around 13 $ without case. Luxmeter take 15 mA, so it will works long time on one Li-Ion battery.
Step 1: BOM
- For project you need this components(affiliate links, if you want to support me):
Arduino Pro Mini 5V
MAX44009
- Wide 0.045 Lux to 188,000 Lux Range
VCC = 1.7V to 3.6V () - ICC = 0.65µA Operating Current
- -40°C to +85°C Temperature Range
- Link
OLED display
- Diagonal Screen Size:0.96″
- Number of Pixels:128 x 64
- Color Depth:Monochrome (Yellow&Blue)
- Dimension:27.8 x27.3x 4.3 mm
- Working Voltage: 3.3~ 5V DC
- Power: 0.06W
- MaxViewing Angle: >160 Degree
- Duty:1/32Brightness ( cd/m2):150 (Typ) @ 5V
- Interface: I2C
- Link
TP4056
- need USB to micro USB cable for charging
- input 5V
- Link
Li-Ion battery
- 3 – 4.2 Volts
- Link
18650 holder
Switch jumper
Cables and header
- female to female
- female and male header
- Link to cables
- Link to pin headers
Step 2: Circuit
You need of course 5V Arduino to power it with Li-Ion battery (4,2 V!)
Connections:
Arduino – MAX44009 (same for OLED display)
A4 – SDA
A5 – SCL
VCC – VIN
GND – GND
TP4056 – Arduino Pro Mini
OUT+ – VCC
Arduino – battery
VCC – plus terminal (max 5 V for Arduino 5V)
Arduino – switch jumper
GND – first switcher
TP4056 – switch jumper
OUT – – second switcher
Battery – switch jumper
minus terminal – first and second switcher
Step 3: Code
#include <Wire.h> #include <Adafrfuit_SSD1306.h> #include <Adafruit_GFX.h>
#include <Fonts/FreeSerif9pt7b.h>
#include “MAX44009.h”
MAX44009 Lux(0x4A);
float lux; float watts; // OLED display TWI address #define OLED_ADDR 0x3C Adafruit_SSD1306 display(-1); // restart display with reset button on arduino void setup() { Lux.Begin(0, 188000); display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR); display.clearDisplay(); display.display(); // display a line of text display.setTextSize(1); display.setTextColor(WHITE); display.setFont(&FreeSerif9pt7b); display.setCursor(1,15); display.print("MAX44009"); display.display(); } void loop() { lux=Lux.GetLux(); // get luxs watts =Lux.GetWpm(); // get watts/m2, only for SUN source display.fillRect(1, 20, 100, 100, BLACK); // create black rectangle on values position display.setCursor(1,40); display.print(lux); display.setCursor(80,40); display.print("lux"); display.setCursor(1,60); display.print(watts); display.setCursor(80,60); display.print("W/m"); display.setCursor(115,55); display.print("2"); display.display(); delay(1000); }
Read more: Portable Luxmeter