"Wees een heldere vonk, licht uit tot het donker is!" soms vergeten we de lichten uit te doen en elektriciteit te verspillen en je moet overdag ook een straatlantaarn hebben zien branden. We hebben al een paar circuits op de donkere detector gebouwd waar de lichten automatisch uitgaan als het buiten helder is en AAN gaan als het buiten donker is. Maar deze keer schakelen we in dit circuit niet alleen de lichten aan en uit op basis van de lichtomstandigheden, maar variëren we ook de intensiteit van het licht op basis van de lichtomstandigheden van buitenaf. Hier hebben we het LDR- en PWM-concept met Arduino gebruikt voor het automatisch verlagen of verhogen van de helderheid van de 1 watt Power LED.
Kort gezegd verwijst PWM naar Pulse Width Modulation, het uitgangssignaal via een PWM-pin zal een analoog signaal zijn en als een digitaal signaal van de Arduino worden verkregen. Het gebruikt de duty-cycle van de digitale golf om de sequentiële analoge waarde voor het signaal te genereren. En dat signaal wordt verder gebruikt om de helderheid van de Power-LED te regelen.
Materiaal vereist
- Arduino UNO
- LDR
- Weerstand (510, 100k ohm)
- Condensator (0.1uF)
- Transistor 2N2222
- Power LED van 1 watt
- Draden aansluiten
- Breadboard
Schakelschema
Code en uitleg
De volledige Arduino-code voor automatische LED-dimmer wordt aan het einde gegeven.
In de onderstaande code definiëren we de PWM-pin en de variabelen die in de code moeten worden gebruikt.
int pwmPin = 2; // wijst pin 12 toe aan variabele pwm int LDR = A0; // wijst analoge ingang A0 toe aan variabele pot int c1 = 0; // declareert variabele c1 int c2 = 0; // declareert variabele c2
Nu, in de lus, lezen we eerst de waarde met behulp van het commando "analogRead (LDR)" en slaan vervolgens de analoge invoer op in een variabele met de naam "value" . Door wat wiskundige berekeningen uit te voeren, genereren we het PWM-signaal. Hier regelen we de intensiteit van het licht met PWM alleen als de analoge waarde minder is dan 500, en als deze meer is dan 500, schakelen we de lichten volledig uit.
int waarde = analogRead (LDR); Serial.println (waarde); c1 = waarde; c2 = 500-c1; // trekt c2 af van 1000 ans slaat het resultaat op in c1 if (waarde <500) { digitalWrite (pwmPin, HIGH); delayMicroseconds (c2); digitalWrite (pwmPin, LOW); delayMicroseconds (c1); } if (waarde> 500) { digitalWrite (2, LOW); } }
U kunt hier meer leren over PWM in Arduino.
Hoe het de lichtintensiteit automatisch regelt:
Volgens het schakelschema hebben we een spanningsdelercircuit gemaakt met LDR en 100k-weerstand. De uitgang van de spanningsdeler wordt naar de analoge pin van de Arduino gevoerd. De analoge pin detecteert de spanning en geeft een analoge waarde aan Arduino. De analoge waarde verandert volgens de weerstand van LDR. Dus als het donker is boven de LDR, wordt de weerstand verhoogd en neemt de spanningswaarde (analoge waarde) af. Daarom varieert de analoge waarde de PWM-output of de duty-cycle, en de duty-cycle is verder evenredig met de lichtintensiteit van de power-LED. Dus het licht boven de LDR zal automatisch de intensiteit van de Power LED regelen. Hieronder ziet u het stroomdiagram hoe dit zal werken, het pijltje naar boven geeft "stijgend" aan en het pijltje naar beneden geeft "afnemend" aan.
Lichtintensiteit (op LDR) ↓ - Weerstand ↑ - Spanning op analoge pin ↓ - Inschakelduur (PWM) ↑ - Helderheid van Power-LED ↑
Als het buiten volledig helder is (wanneer de analoge waarde meer dan 500 stijgt), gaat de stroom-LED uit.
Op deze manier kunt u de lichtintensiteit automatisch regelen met LDR.
Bekijk hier onze alle LDR-gerelateerde circuits verder.