Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:arduino:buttons:project2 [2017/04/17 12:38] Somepubet:arduino:buttons:project2 [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 +====== Projekt 2 LED-i juhtimine potentsiomeetriga   ======
  
 +Ühendada Arduino plaadiga potentsiomeeter. Potentsiomeetri keskmine klemm ühendatakse analoogsisendisse ja äärmistest üks maa ning teine toitega.\\
 +
 +
 +{{:et:arduino:buttons:projekt2.jpg?400|}}
 +
 +Korrektsel ühendamisel tekib mikrokontrolleri sisendviigu ja maa vahele potentsiomeetri asendist sõltuv pinge. Kui potentsiomeetrit pöörata ühest äärmusest teise, siis sisendpinge muutub vahemikus 0 kuni 5 V. Tekkinud ahelat nimetatakse pingejaguriks, mis jagab sisendpinge kahe takisti vahel proportsionaalselt takistuste väärtustele. Mikrokontroller muundab analoogsignaali (pingenivoo) digitaalsele kujule, mis jääb vahemikku 0-1023. Maksimaalne väärtus sõltub mikrokontrolleri analoog-digitaalmuunduri (ADC) resolutsioonist. Arduino-l on ADC üldjuhul 10 bitti ehk maksimum väärtus (2^10) - 1 = 1023, kuid saab seadistada ka 8 biti peale. Täpsemalt Arduino analoogsisendite kohta saab lugeda siit: [[https://www.arduino.cc/en/Tutorial/AnalogInputPins|]]
 +
 +===== Näide #2.1 Potentsiomeetri pööramisel üle nivoo süttib LED =====
 +Mikrokontrolleril on sisendi digitaalsel kujul lugemisel kindel pingenivoo, millest alates väärtustatakse sisend kõrgeks. Keerates aeglaselt potentsiomeetrit on võimalik see lülitumise punkt üles leida. Muutusest annab märku LED viigul D13.
 +
 +<code c>
 +/*
 +Nimetus: Näide #2.1
 +Kirjeldus: Potentsiomeetri pööramisel üle nivoo süttib LED
 +*/
 +
 +// Viik kuhu on ühendatud potentsiomeeter
 +const int pote = A1; 
 +
 +// Viik kuhu on ühendatud LED
 +const int led = 13; 
 +
 +// Potentsiomeetri muutuja väärtuse salvestamine ja selle algväärtustamine
 +int poteOlek = 0; 
 + 
 +void setup()
 +{
 +  /* Mikrokontrolleri viigud on tavaolekus sisendid ja seega ei pea
 +  potentsiomeetri sisendit eraldi seadistama */
 +  pinMode(led, OUTPUT); // Seadistame LED viigu väljundiks
 +}
 +
 +void loop() 
 +{
 +  // Viigu muutuja hetkeväärtuse salvestamine
 +  poteOlek = digitalRead(pote); 
 +  
 +  // Kui sisendviik on kõrge, siis seame LED viigu kõrgeks
 +  if(poteOlek > 0)
 +  {
 +    digitalWrite(led, HIGH);
 +  }
 +  // Muul juhul seame led viigu madalaks
 +  else
 +  {
 +    digitalWrite(led, LOW);
 +  }
 +}
 +</code>
 +
 +
 +===== Näide #2.2 LED-i vilkumise sagedus sõltub potentsiomeetri asendist =====
 +Antud näide käsitleb LED-i vilgutamist analoogsisendi järgi. Sisendiks on eelmisest näitest tuttav potentsiomeeter. Sõltuvalt potentsiomeetri asendist muutuvad programmis viidete pikkused, mida on visuaalselt näha LED-i vilkumisest. Lühemate viidete korral vilkumise sagedus suureneb ja pikemate korral väheneb.
 +
 +<code c>
 +/* Nimetus: Näide #2.2
 +   Kirjeldus: LED-i vilkumise sagedus sõltub potentsiomeetri asendist
 +*/
 +// Algus identne näitega #2.1 (kommenteeritud koodi vaata sealt)
 +const int pote = A1; 
 +const int led = 13; 
 +
 +int poteOlek = 0; 
 + 
 +void setup()
 +{
 +  pinMode(led, OUTPUT);
 +}
 +
 +void loop() 
 +{
 +  // Potentsiomeetri muutuja hetkeväärtuse salvestamine 
 +  poteOlek = analogRead(pote); 
 +  
 +  // LED viigu oleku kõrgeks seadmine
 +  digitalWrite(led, HIGH); 
 +  
 +  // Viite tekitamine, mille pikkus on võrdne potentsiomeetri sisendi väärtusega
 +  delay(poteOlek);  
 +  
 +  // LED viigu oleku madalaks seadmine
 +  digitalWrite(led, LOW); 
 +  
 +  // Viite tekitamine, mille pikkus on võrdne potentsiomeetri sisendi väärtusega
 +  delay(poteOlek); 
 +}
 +</code>
 +
 +===== Näide #2.3 LED-i ereduse juhtimine potentsiomeetri asendi järgi =====
 +Arduino Unol puudub digitaal-analoogmuundur (DAC), mistõttu tuleb LED-i ereduse juhtimiseks seda kiirelt sisse ja välja lülitada. Teostades lülitusi piisaval kiirusel ei ole inimese silmaga LED-i vilkumine märgatav ning tekib tunne, et LED põleb ühtlaselt. Viigu oleku muutmine ise võtab mikrokontrolleril aega vaid mõni mikrosekund. Seega LED-i ereduse juhtimiseks tuleb kasutada viiteid lülituste vahel. Vajalike lühiajaliste viidete teostamiseks saab kasutada käsku //delayMicroseconds()//, mille minimaalne suurus on 1 mikrosekund ehk 0,001 ms. Võtame näiteks signaali pulsi perioodiks 1023 mikrosekundit. Sellest osa aega paneme LED-i põlema ja ülejäänud aja alati kustu. Niiviisi perioodis põlemas ja kustus oleku suhte reguleerimisega muutub ka LED-i eredus.
 +
 +<code c>
 +/* Nimetus: Näide #2.3
 +   Kirjeldus: LED-i ereduse juhtimine potentsiomeetri asendi järgi */
 +// Algus identne näitega #2.1 (kommenteeritud koodi vaata sealt)
 +
 +const int pote = A1; 
 +const int led = 13; 
 +int poteOlek = 0; 
 + 
 +void setup()
 +{
 +  pinMode(led, OUTPUT);
 +}
 +
 +void loop() 
 +{
 +  // Potentsiomeetri muutuja hetkeväärtuse salvestamine
 +  poteOlek = analogRead(pote); 
 +  
 +/* Kui potentsiomeetri väärtus on suurem kui 0, siis seame LED viigu kõrgeks,
 +   seejärel programm ootab potentsiomeetri väärtusega võrdse arvu mikrosekundeid */
 +  if (poteOlek > 0) 
 +  {
 +    digitalWrite(led, HIGH);
 +    delayMicroseconds(poteOlek); 
 +  }
 +  
 +  // Seame LED viigu madalasse olekusse
 +  digitalWrite(led, LOW); 
 +  
 +  // Programm ootab ülejäänud arvu mikrosekundeid perioodist 
 +  delayMicroseconds(1023 - poteOlek); 
 +}
 +</code>
 +
 +===== Harjutused =====
 +=== Harjutus #2.1 ===
 +Modifitseerida näitekoodi nii, et LED läheb põlema viigu kõrgest olekust madalasse olekusse minekul. Potentsiomeetri kogu pöördenurk vastab pingevahemikule 0-5 V. Leida ligilähedane pinge väärtus, mille juures Arduino sisend muutub madalast olekust kõrgesse olekusse ja vastupidi. Kas esineb hüsterees lülitumiste vahel? Tulemuse saamiseks võib kasutada potentsiomeetri nurka või jadapordi monitori. 
 +
 +=== Harjutus #2.2 ===
 +Modifitseerida näiteprogrammi nii, et potentsiomeetri keskpunktist (väärtus ~512) ühele poole reguleeritakse LED-i põlemas oleku viidet ja teisele poole kustus oleku viidet. Viite pikkuse reguleerimisel peab maksimaalne viite väärtus olema keskpunkti lähedal ja minimaalne lõpp-punktides. Fikseeritud viite pikkus peab olema 512 millisekundit. Seejuures reguleeritav viite pikkus peab jääma vahemikku 0 kuni 511. Tulemusena peaks ühes potentsiomeetri äärmuses LED olema püsivalt põlemas ja teises püsivalt kustus ning keskel võrdselt põlemas ja kustus.
 +
 +=== Harjutus #2.3 ===
 +Modifitseerida näiteprogrammi nii, et LED põleb ainult potentsiomeetri pööramise ajal. LED-i põlemise eredus sõltub potentsiomeetri pööramise kiirusest.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0