Lekce 11
Jedenáctá lekce Arduino kurzu pro začátečníky: zapojíte fotorezistor a necháte ho podle množství světla rozsvěcet řadu LED. Ukážeme si zapojení, čtení analogového vstupu funkcí analogRead i kód do Arduino IDE – čím víc na čidlo posvítíte, tím víc LED se rozsvítí. Skvělý základ pro světlocitlivé detektory.
Popisek obrázku: osm LED v řadě, každá přes vlastní rezistor 220 Ω do GND, anody na pinech 5 aķ 12. Fotorezistor je zapojený jako dělič napětí s rezistorem 10 kΩ a jeho střed vede na analogový vstup A0.
| Komponenta | Arduino |
|---|---|
| LED 1 – 8 (anody, každá přes 220 Ω) | piny 5 – 12 |
| LED (katody) | GND |
| Fotorezistor (1. nožička) | 5V |
| Fotorezistor (2. nožička) + rezistor 10 kΩ | A0 |
| Rezistor 10 kΩ (druhý konec) | GND |
Fotorezistor je součástka, jejíž odpor závisí na světle – čím víc na něj svítí, tím nižší má odpor. Zapojený jako dělič napětí s rezistorem 10 kΩ posílá na vstup A0 napětí, které Arduino přečte funkcí analogRead jako číslo 0 – 1023. Tuto hodnotu funkce map přepočítá na počet LED, které mají svítit. Při hodně světle se rozsvítí celá řada, ve tmě zhasne všechno.
// Fotorezistor
// Když na fotorezistor svítí světlo určité intenzity, uvidíte určitý počet svítících LED.
// Když intenzitu zvětšíte, rozsvítí se víc LED. Když ho dáte do tmy, žádná LED svítit nebude.
// Email: podpora@laskakit.cz · Web: laskakit.cz
const int NbrLEDs = 8; // počet LEDek
const int ledPins[] = { 5, 6, 7, 8, 9, 10, 11, 12 }; // pole pinů s LED
const int photocellPin = A0; // pin fotorezistoru
int sensorValue = 0; // přečtená hodnota z čidla
int ledLevel = 0; // hodnota čidla převedená na počet LED
void setup() {
for (int led = 0; led < NbrLEDs; led++) {
pinMode(ledPins[led], OUTPUT); // nastavit všechny LED piny jako výstup
}
}
void loop() {
sensorValue = analogRead(photocellPin); // přečíst hodnotu z pinu A0
ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); // převést na počet LED
for (int led = 0; led < NbrLEDs; led++) {
if (led < ledLevel) { // pokud je číslo LED menší než ledLevel
digitalWrite(ledPins[led], HIGH); // zapnout tuto LEDku
} else {
digitalWrite(ledPins[led], LOW); // jinak ji vypnout
}
}
}
map(sensorValue, 300, 1023, 0, 8) si můžete doladit podle svého osvětlení. Když je v místnosti hodně světla, zvyšte spodní hranici (300).QJak se mění odpor fotorezistoru?