Arduino: Selv regulerende LED baseret på lys

Arduino: Selv regulerende LED baseret på lys

Nu har jeg leget med Arduino i en lille uges tid og jeg har bestemt lært utrolig meget med strøm, modstand, resistor osv.

Så nu følte jeg at det var tid til at prøve at lave lidt selv, mit eget lille projekt. Det blev til en selv regulerende LED lampe som er baseret på lys inputtet fra en lys sensor.

 

Hvordan fungerer den

36 37

Den fungerer ved at der er tilkoblet en lys sensor i en af analog portene så jeg kan aflæse hvor meget lys sensoren modtager.

Så har jeg også puttet en LED lampe ind i en af PWM portene ( PWM Pulse-width modulation ved at sætte en LED i denne port kan jeg kontrolere hvor meget LED’en skal lyse ).

Der er selvfølgelig også indsat to 330Ω ohm resistore, en imellem LED input og strømmen og den anden imellem lys sensor input og strømmen så jeg ikke ødelægger sensoren og LED’en det ville være lidt røv.

 

Når jeg har tændt for den modtager mit program en tal værdi baseret på hvor meget lys som sensoren opfanger, ud fra den tal værdi finder jeg procenten baseret på hvor meget lys sensoren absolut kan modtage, den procent kan jeg nu bruge til at fortælle LED’en hvilken styrke den skal lyse og det skal i dette tilfælde være førnævne procent ud af LED’ens max value.

Fordi at denne lys sensor ikke er særlig følsom og fordi den her LED lyser som bar’ pokker så har jeg valgt at ændre tallene lidt så de passer til den hardware og hvor meget/lidt lys der er i mit rum, så den lyser korrekt.

 

 

Video af lampen

Source code

int ldrPin = 0;
float ldrValue = 0;
//Values
//The more light, the lower value.
//Less light, higher value
float ldrMaxValue = 1023;
float ldrMinValue = 1017;
float ldrPercent = 0.00;
int ledPinNewValue = 0;

int ledPin = 9;

void setup() {
  Serial.begin(9600);
  Serial.flush();
  
  pinMode(ledPin, OUTPUT);
}

void loop() {
  ldrValue = analogRead(ldrPin);

  if (ldrValue > 1015)
  {
    ldrPercent = (ldrValue-1015) / (ldrMaxValue-1015);
  
    ledPinNewValue = 50 * ldrPercent;
    
      
    if (ldrPercent <= 1.00 && ldrValue > 1000)
    {
      analogWrite(ledPin, ledPinNewValue);
    
    }
  }

  Serial.print(ldrValue);
  Serial.print(" - "); 
  Serial.print(ldrMaxValue);
  Serial.print(" - ");  
  Serial.print(ldrMinValue);
  Serial.print(" - ");  
  Serial.print((ldrMaxValue-ldrMinValue));
  Serial.print(" - ");   
  Serial.print(ldrPercent);
  Serial.print(" - ");
  Serial.println(ledPinNewValue);  
  
  delay(150);
}