Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Poniższe kroki są eksperymentami ilustrującymi działanie diod LED. Pokazują, jak ściemniać diodę LED w równomiernym tempie oraz jak ją rozjaśniać i ściemniać.
Będziesz potrzebować:
- Arduino (użyłem duetu)
- Deska do krojenia chleba
- 5mm czerwona dioda LED
- Rezystor 330 Ω (nie krytyczny 330-560 Ω będzie działać.)
- Drut przyłączeniowy o grubości 22 mm
Części potrzebne do tych eksperymentów znajdują się we wszystkich zestawach startowych Arduino.
Krok 1: Wyjaśnienie modulacji impulsowej
Diody LED zawsze działają pod tym samym napięciem, niezależnie od jasności. Jasność jest określana przez oscylator fali prostokątnej, a czas, w którym napięcie jest wysokie, określa jasność. Nazywa się to modulacją szerokości impulsu (PWM). Jest to kontrolowane przez funkcję Arduino analogWrite(pin, n), gdzie n ma wartość od 0 do 255. AnalogWrite() wyprowadza PWM, a nie prawdziwy analog. Jeśli n=2 dioda LED będzie dwukrotnie jaśniejsza niż n=1. Jasność zawsze podwaja się, gdy n podwaja się. Zatem n=255 będzie dwa razy jaśniejsze niż n=128.
Wartość n jest często wyrażana jako wartość procentowa nazywana cyklem pracy. Zdjęcia przedstawiają ślady oscyloskopu dla cykli pracy 25, 50 i 75%.
Krok 2: Nierównomierne przyciemnianie
Zbuduj obwód jak na schemacie. To jest tak, jak w obwodzie migającym diodą LED. Używa pinu 9, ponieważ musisz użyć pinu obsługującego PWM.
Skopiuj/wklej poniższy szkic do Arduino IDE i uruchom go.
Zauważysz, że im jaśniejsza dioda LED, tym wolniej się ściemnia. Gdy zbliża się do najciemniejszego, będzie się ściemniał bardzo szybko.
pusta konfiguracja()
{ pinMode(9, WYJŚCIE); } void loop() { int pin = 9; for (int i = 255; i > -1; i--) { analogWrite(pin, i); opóźnienie(10); } for (int i = 0; i < 256; i++) { analogWrite(pin, i); opóźnienie(10); } }
}
Następny krok pokazuje, jak ściemniać diodę LED ze stałą szybkością, a w jednym dla instrukcji.
Krok 3: W górę i w dół w jednym For()
Aby dioda LED ściemniała się ze stałą szybkością, opóźnienie() musi rosnąć w tempie wykładniczym, ponieważ połowa cyklu pracy zawsze wytwarza połowę jasności. Moją pierwszą myślą była próba użycia funkcji map(), ale jest ona liniowa.
Linia:
int d = (16-i/16)^2;
oblicza odwrotność kwadratu jasności w celu określenia długości opóźnienia.
Skopiuj/wklej poniższy szkic do Arduino IDE, a zobaczysz, że dioda LED będzie się pojawiać i gasnąć w stałym tempie.
pusta konfiguracja()
{ pinMode(9, WYJŚCIE); } void loop() { int x = 1; int pin = 9; dla (int i = 0; i > -1; i = i + x) { int d = (16-i/16)^2; analogZapis(pin, i); opóźnienie(d); jeśli (i == 255) x = -1; // zmień kierunek na szczycie } }