[034] Prawie wszystko o diodach świecących cz. 2

[034] Prawie wszystko o diodach świecących cz. 2

Na wstępie zapraszam do zaznajomienia się z podstawami w tym artykule. Czas zabrać się za programowanie. Zaczniemy jednak od samych podstaw, czyli podłączymy diodę pod cyfrowy port wyjściowy i będziemy ją włączać i wyłączać. Przypomnę – diodę podłączymy przez rezystor, zakładam 10 mA i z prawa Ohma wynika, że powinienem dobrać rezystor równy 300 Ω


const byte led = 3;  // Pin, do którego podpięta jest dioda świecąca.

void setup() {
  pinMode(led, OUTPUT);  // Deklaruj pin "led" jako port wyjściowy.
}

void loop() {
  digitalWrite(led, HIGH);  // Ustaw na porcie "led" stan wysoki.
  delay(500);               // Zaczekaj 500 ms
  digitalWrite(led, LOW);   // Ustaw na porcie "led" stan niski.
  delay(250);               // Zaczekaj 250 ms
}

Aby Arduino mogło sterować diodą, należy zadeklarować port wyjściowy (led) i ustawiać tam poziom wysoki bądź niski. To jest oczywiście banał dla tych, którzy z Arduino już się zetknęli i zarazem kopia pierwszego programu, znanego pod nazwą Blink. Ale zwróćmy uwagę na pewien szczegół: jeśli katodę podłączymy do masy, w tym przykładzie stan wysoki będzie trwał dłużej (500 ms) i dioda będzie dłużej świecić niż nie świecić (250 ms). Diodę jednak równie dobrze można podłączyć anodą do linii zasilającej i nie będzie to wcale błędem. Co nam się tym razem zmieni? Stan wysoki będzie ją gasił, a niski – włączał. Z tego wniosek, że po pierwsze, można tak podłączać diody, a nawet w dawnych czasach, podczas pracy na przykład z kontrolerem 8051 był to standardowy sposób ich podłączania. Po drugie, przy takim połączeniu wszystko działa na odwrót i trzeba o tym pamiętać. Dlatego w takim przypadku dioda dłużej jest ciemna (500 ms) niż się świeci (250 ms), choć program jest ten sam.

Po tym wstępie czas na regulację jasności. Naturalnym wydaje się użycie potencjometru (a właściwie zmiennego rezystora) i tak się da, ale w przypadku Arduino i w ogóle układów mikroprocesorowych z różnych powodów jest to niepraktyczne. Należałoby albo taki zmieniający się rezystor zasymulować regulowanym źródłem prądowym, albo nawet dałoby się użyć potencjometru z silniczkiem, który często można znaleźć w wieżach audio, tylko to już byłoby mocne nadużycie. Istnieje prostszy sposób, który korzysta z ułomności naszego oka. Wystarczy szybko diodę włączać i wyłączać, w taki sposób, by stosunek czasu świecenia do nieświecenia móc regulować w szerokich granicach. Dioda będzie mrugać, ale gdy to mruganie będzie szybkie, nie zauważymy tego, a wszystko zleje nam się i uśredni. Uśredni zgodnie ze stosunkiem czasu świecenia do nieświecenia, więc w ten sposób otrzymamy możliwość regulacji jasności i to zupełnie za darmo, bo żadnych dodatkowych elementów tutaj nie potrzeba.

const byte led = 3;            // Pin, do którego podpięta jest dioda świecąca.
const byte potencjometr = A1;  // Pin, którym będziemy mierzyć napięcie.

void setup() {
  pinMode(led, OUTPUT);  // Deklaruj pin "led" jako port wyjściowy.
}

void loop() {
  analogWrite(led, (analogRead(potencjometr) / 4));  // Ustaw przebieg na porcie "led" zgodnie z odczytaną wartością na porcie "potencjometr".
}

O funkcji analogWrite pisałem już w artykule o budziku. Przypomnę, że aktywuje ona przebieg zmienny o częstotliwości około 500 Hz na wybranym porcie (nie każdym – tylko kilka pinów wspiera tę generację), a wypełnienie przebiegu jest zgodne z drugim argumentem funkcji. Dla 255 w ogóle nie występują stany niskie, czyli jasność jest maksymalna, dla 0 – nie ma stanów wysokich, zatem nie ma świecenia. Tym argumentem będzie tutaj wartość napięcia uzyskana ze ślizgacza potencjometru znajdującego się na płytce edukacyjnej TME, który został podpięty pod pin A1.

A ponieważ przetwornik A/D ma czterokrotnie większą dokładność od generatora przebiegu o zmiennym wypełnieniu, wynik trzeba podzielić przez 4. W przeciwnym razie potencjometr w każdej ćwiartce obrotu zwiększałby nam jasność od minimum do maksimum. Podstawy za nami, czas na bardziej praktyczne realizacje, w których występuje więcej diod. Zacznijmy od skromnej na razie ilości, powiedzmy trzech.

Można układ z początków zabawy rozbudować, dołączając jeszcze dwie diody z własnymi rezystorami. Jeśli każda będzie konsumować 10 mA, całość zażyczy sobie 30 mA. 40 mA to absolutne maksimum dla Arduino Uno, więc w ten sposób nie poszalejemy, ograniczając się do ilości sztuk 4, przy założeniu karmienia każdej diody dziesięcioma miliamperami. A może by tak zaoszczędzić na rezystorze, łącząc diody równolegle?

Jak to mówią, jeśli czegoś bardzo się chce, to można, ale nie poleca się. Teoretycznie, jeśli będą to identyczne diody i położone blisko siebie, prąd rozejdzie się proporcjonalnie. Pamiętajmy jednak o przykładzie z tamą: żeby dwie tamy zadziałały równocześnie, muszą być idealnie równe. I z tym ideałem właśnie jest problem, w praktyce trudno go zachować. A jeśli jeszcze diody będą oddalone od siebie, dodatkowo będzie nam przeszkadzał spadek napięcia na przewodach. Zatem przyjmijmy, że w połączeniach równoległych stosujemy rezystory zawsze.

Rozważmy sobie ostatnią kombinację: a może by tak połączyć diody szeregowo? Tym razem nie ma przeciwwskazań, ale pamiętajmy, że jedna czerwona dioda potrzebuje około 2 woltów. Dwie – czterech, a trzy – sześciu. Sprawdźmy. Po podłączeniu dwóch diod wszystko nadal działa, z tym że należałoby wprowadzić korektę rezystora. Gdy dołożymy trzecią diodę, będziemy mieć figę, a nie latarkę, bo trzy diody potrzebują już 6 woltów, a zasilanie dostarcza pięciu. Żadna zmiana rezystora nie zrobi nam światła.

Podsumowując: w ten sposób możemy podłączyć maksymalnie 4 łańcuchy diod po dwie sztuki, czyli 8 LED-ów na jedno wyjście Arduino, przy czym będą one świecić prądem równym 10 mA każda. O tym co zrobić, gdy zachce nam się większych instalacji albo mocniejszych diod, napiszę wkrótce.

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2Sprawdź tutaj

Przeczytaj również

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2024 arduino.pl