„Bądź jasną iskrą, wyłącz światło, aż się ściemni!” czasami zapominamy o wyłączeniu świateł i marnowaniu prądu, a musieliście też widzieć włączane światła uliczne w ciągu dnia. Zbudowaliśmy już kilka obwodów na detektorze ciemności, w których światła wyłączają się automatycznie, jeśli na zewnątrz jest jasno, i włączają się, jeśli na zewnątrz jest ciemno. Ale tym razem w tym obwodzie nie tylko włączamy i wyłączamy światła w zależności od warunków świetlnych, ale także zmieniamy intensywność światła w zależności od zewnętrznych warunków oświetleniowych. Tutaj zastosowaliśmy koncepcję LDR i PWM z Arduino do automatycznego zmniejszania lub zwiększania jasności 1-watowej diody LED mocy.
Zasadniczo PWM odnosi się do modulacji szerokości impulsu, sygnał wyjściowy przez pin PWM będzie sygnałem analogowym i zostanie odebrany jako sygnał cyfrowy z Arduino. Wykorzystuje cykl pracy fali cyfrowej do generowania sekwencyjnej wartości analogowej dla sygnału. Ten sygnał jest dalej używany do kontrolowania jasności diody LED zasilania.
Wymagany materiał
- Arduino UNO
- LDR
- Rezystor (510, 100 kΩ)
- Kondensator (0,1 uF)
- Tranzystor 2N2222
- 1 watowa dioda LED mocy
- Przewody łączące
- Płytka prototypowa
Schemat obwodu
Kod i wyjaśnienie
Pełny kod Arduino dla automatycznego ściemniacza LED jest podany na końcu.
W poniższym kodzie definiujemy pin PWM i zmienne, które mają być użyte w kodzie.
int pwmPin = 2; // przypisuje pin 12 do zmiennej pwm int LDR = A0; // przypisuje wejście analogowe A0 do zmiennej pot int c1 = 0; // deklaruje zmienną c1 int c2 = 0; // deklaruje zmienną c2
Teraz w pętli najpierw odczytujemy wartość za pomocą polecenia „analogRead (LDR)”, a następnie zapisujemy wejście analogowe do zmiennej o nazwie „wartość” . Wykonując obliczenia matematyczne, generujemy sygnał PWM. Tutaj kontrolujemy natężenie światła za pomocą PWM tylko wtedy, gdy wartość analogowa jest mniejsza niż 500, a jeśli jest większa niż 500, całkowicie wyłączamy światła.
wartość int = analogRead (LDR); Serial.println (wartość); c1 = wartość; c2 = 500-c1; // odejmuje c2 od 1000 i zapisuje wynik w c1 if (wartość <500) { digitalWrite (pwmPin, HIGH); delayMicroseconds (c2); digitalWrite (pwmPin, LOW); delayMicroseconds (c1); } if (wartość> 500) { digitalWrite (2, LOW); } }
Możesz dowiedzieć się więcej o PWM w Arduino tutaj.
Jak automatycznie kontroluje natężenie światła:
Zgodnie ze schematem obwodu wykonaliśmy obwód dzielnika napięcia za pomocą rezystora LDR i 100k. Wyjście dzielnika napięcia jest podawane na analogowy pin Arduino. Pin analogowy wykrywa napięcie i podaje wartość analogową do Arduino. Wartość analogowa zmienia się zgodnie z rezystancją LDR. Tak więc, jeśli jest ciemny nad LDR, jego rezystancja wzrasta, a tym samym wartość napięcia (wartość analogowa) maleje. W związku z tym wartość analogowa zmienia wyjście PWM lub cykl pracy, a cykl pracy jest ponadto proporcjonalny do intensywności światła diody LED mocy. Tak więc światło nad LDR automatycznie kontroluje intensywność diody LED zasilania. Poniżej znajduje się schemat blokowy, jak to będzie działać, strzałka w górę wskazuje „rosnący”, a strzałka w dół wskazuje „malejący”.
Natężenie światła (w LDR) ↓ - Rezystancja ↑ - Napięcie na pinie analogowym ↓ - Cykl pracy (PWM) ↑ - Jasność diody LED zasilania ↑
Jeśli na zewnątrz jest całkowicie jasno (gdy wartość analogowa wzrośnie o ponad 500), dioda LED zasilania zgaśnie.
W ten sposób możesz automatycznie kontrolować intensywność światła za pomocą LDR.
Sprawdź tutaj wszystkie nasze obwody związane z LDR.