#include <Stepper.h>
#include <LiquidCrystal.h>
#define STEPS_PER_REVOLUTION 200
#define STEPPER_PIN_1 5
#define STEPPER_PIN_2 4
#define STEPPER_PIN_3 3
#define STEPPER_PIN_4 2
#define LIGHT_SENSOR_PIN A0
#define LIGHT_THRESHOLD 511
Stepper stepper(STEPS_PER_REVOLUTION, STEPPER_PIN_1, STEPPER_PIN_2, STEPPER_PIN_3, STEPPER_PIN_4);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
bool curtainsClosed = false;
const float GAMMA = 0.7;
const float RL10 = 50;
void setup() {
stepper.setSpeed(30);
lcd.begin(16, 2);
lcd.print("Curtains");
}
void loop() {
curtains();
}
void curtains() {
int lightLevel = analogRead(LIGHT_SENSOR_PIN);
float voltage = lightLevel / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Brightness:");
lcd.print(int(lux));
if (lightLevel <= LIGHT_THRESHOLD && !curtainsClosed) {
lcd.clear();
closeCurtains();
}
else if (lightLevel > LIGHT_THRESHOLD && curtainsClosed) {
lcd.clear();
openCurtains();
}
delay(100);
}
void openCurtains() {
lcd.print("Curtains Closed");
stepper.step(-200);
curtainsClosed=false;
}
void closeCurtains() {
lcd.print("Curtains Opened");
stepper.step(200);
curtainsClosed=true;
}