2.3 Analogie signāli (Potenciometrs)
Stundas uzdevums: Pieslēgt potenciometru, izprast analogo datu nolasīšanu (no 0 līdz 1023) un izmantot iegūtos datus, lai plūstoši mainītu LED diodes spilgtumu.
Datorika 7. klase (D.7.2.1., D.7.4.1., D.7.6.1.)70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - pieslēdz potenciometra trīs kājas · 2. uzdevums (~20 min) - izdrukā vērtības 0-1023 Serial Monitor · 3. uzdevums (~25 min) - regulē LED spilgtumu ar kloķi. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver tinkercad.com un jaunu Circuit projektu - šoreiz vajadzēs arī Arduino portu ar tildes zīmi (~), jo bez tās spilgtumu regulēt nevar.
Teorija: Melnbaltā un krāsainā pasaule (Digitāls pret Analogu)
Līdz šim mēs izmantojām pogas (Digitāls signāls), kas deva tikai divas vērtības – 0 (LOW) vai 1 (HIGH). Bet reālā pasaule nav tikai melnbalta! Kā izmērīt temperatūru, gaismas spilgtumu vai pagriezt skaļuma kloķi? Tam nepieciešami analogie signāli.
- Analogie porti (A0 līdz A5): Arduino apakšējā labajā stūrī ir īpaši porti. Tie spēj izmērīt spriegumu (no 0V līdz 5V) un pārvērst to skaitlī no 0 līdz 1023.
- Potenciometrs: Tas ir mainīgs rezistors (gluži kā skaļuma regulēšanas poga radio). Tam ir 3 kājiņas. Ārējās pieslēdz pie 5V un GND, bet vidējā kājiņa iet uz analogo portu (A0). Griežot kloķi, spriegums vidējā kājiņā mainās.
- analogRead(pin): Komanda, kas nolasa sensora vērtību. Piemēram:
int dati = analogRead(A0); - analogWrite(pin, vērtība): Ja gribam plūstoši iedegt LED diodi (nevis tikai ieslēgt/izslēgt), izmantojam šo komandu. Piezīme: Tā darbojas tikai uz portiem, kuriem blakus ir vilnītis (~), piemēram, ~9. Vērtība var būt no 0 līdz 255.
Vizuālais orientieris: potenciometra vidējā kāja savienojas ar A0 pinu, bet abas ārējās kājas ar 5V un GND.
Praktiskie uzdevumi
1. uzdevums -
Pieslēdz potenciometra trīs kājas
Beigās tavs potenciometrs būs pareizi savienots un nesabojāsies simulācijā.
- Izveido jaunu Tinkercad projektu ar Arduino un maketo plati.
- Savieno 5V ar sarkano (+) līniju un GND ar melno (-) līniju.
- Ievelc uz maketo plates komponenti "Potentiometer".
- Savieno kreiso kāju (Terminal 1) ar melno GND līniju.
- Savieno labo kāju (Terminal 2) ar sarkano 5V līniju.
- Savieno vidējo kāju (Wiper) ar Arduino portu A0.
Gatavs, kad: no vidējās kājas iet vads tieši uz A0, bet abas malējās kājas nav savienotas viena ar otru.
2. uzdevums -
Izdrukā vērtības 0-1023 Serial Monitor
Beigās tu redzēsi, kā skaitlis ekrānā mainās, griežot kloķi.
- Pārslēdz redaktoru uz koda (Text) skatu.
- Ieraksti funkcijā
setup()rinduSerial.begin(9600);. - Ieraksti funkcijā
loop()rinduint sensoraVertiba = analogRead(A0);. - Pievieno zem tās
Serial.println(sensoraVertiba);undelay(50);. - Palaid simulāciju un atver Serial Monitor.
- Pagriez kloķi ar peli no viena gala līdz otram.
Gatavs, kad: vienā kloķa galā ekrānā ir aptuveni 0, otrā - aptuveni 1023.
3. uzdevums -
Regulē LED spilgtumu ar kloķi
Beigās diode kļūs gaišāka un tumšāka, kad tu griez potenciometru.
- Pievieno LED ar 220 omu rezistoru pie Arduino 9. porta - tam blakus ir tildes zīme (~).
- Ieraksti funkcijā
setup()rindupinMode(9, OUTPUT);. - Ieraksti funkcijā
loop()rinduint gaisma = sensoraVertiba / 4;. - Pievieno zem tās rindu
analogWrite(9, gaisma);. - Palaid simulāciju un pagriez kloķi lēnām.
- Pieraksti vienu secinājumu: kāpēc rādījums jādala tieši ar 4.
Gatavs, kad: diode plūstoši maina spilgtumu, nevis tikai ieslēdzas un izslēdzas.
Papildu uzdevums - Instrumentu panelis ar sliekšņiem
Ja pamatdarbs ir gatavs, izveido skaļuma indikatoru no trim diodēm.
- Pievieno vēl divas LED diodes ar rezistoriem pie 10. un 11. porta.
- Pieteic abus jaunos portus funkcijā
setup()kāOUTPUT. - Uzraksti nosacījumu: ja vērtība ir mazāka par 300, deg tikai pirmā diode.
- Pievieno zaru: ja vērtība ir no 300 līdz 700, deg pirmā un otrā.
- Pievieno pēdējo zaru: ja vērtība ir lielāka par 700, deg visas trīs.
Gatavs, kad: lēnām griežot kloķi, diodes iedegas pa vienai, nevis visas reizē.
Biežākās kļūdas (un kā tās labot):
- Sakausējums (īssavienojums): Vidējā kāja savienota ar 5V vai GND, bet abas malējās savienotas kopā. Simulācijā potenciometrs "uzsprāgs". Vienmēr pārbaudi vidējo vadu - tam jāiet uz A0.
- Serial Monitor rāda haotiskus skaitļus (lēkā): A0 vadam ir slikts savienojums vai 5V/GND vadi nav pievienoti. Analogais ports karājas gaisā un nolasa traucējumus.
- LED spilgtums mainās dīvaini vai nedeg: Tu lietoji
digitalWrite(tikai ieslēgt/izslēgt)analogWritevietā, vai arī pievienoji LED portam bez tildes (piemēram, 8 vai 13), kas neprot analogo spriegumu.
Koda piemērs (0-1023 pārvēršana par 0-255 - grūtākā daļa)
// Divas vietas, kur šajā stundā apstājas gandrīz visi:
// 1) analogRead dod 0..1023, bet analogWrite pieņem tikai 0..255,
// tāpēc rādījums JĀDALA ar 4 (1023 / 4 = 255).
// 2) analogWrite strādā TIKAI portos ar tildes zīmi ~ (3, 5, 6, 9, 10, 11).
// Portā 13 spilgtums nemainīsies - diode tikai iedegsies vai nodzisīs.
int potPin = A0; // Potenciometra pieslēgvieta
int ledPin = 9; // LED pieslēgvieta (OBLIGĀTI ar ~ zīmi)
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
// 1. Nolasa potenciometra stāvokli (0 līdz 1023)
int sensoraVertiba = analogRead(potPin);
// 2. Pielāgo matemātiku (Dalām ar 4, lai iegūtu skaitli no 0 līdz ~255)
int spilgtums = sensoraVertiba / 4;
// 3. Izdrukā datus pārbaudei
Serial.println(spilgtums);
// 4. Padod mainīgu spriegumu uz LED diodi
analogWrite(ledPin, spilgtums);
delay(15); // Neliela pauzīte stabilitātei
}