Plačiau apie skaitmeninius ir analoginius signalus bei potenciometrą

 

Pasaulis apie mus yra analoginis. Jeigu ir galvojote, kad pasaulis tampa skaitmeniniu, didžioji dalis stebimų reiškinių mūsų aplinkoje bus analoginiai iš prigimties. Tai gali būti saulės šviesos spalvos nustatymas, okeano vandens temperatūra ar oro užterštumas. Dabar pakalbėsime apie tai, kaip galima sukurti techniką, kuri diskretizuoja begalinį skaičių reikšmių ir jas analizuoja. Vienas iš tokių variantų yra mikrokontreliai, tokie kaip Arduino.

Retai kada būna, kad pasaulis jums duodų informaciją tik dviem būdais. Pažiūrėkime per langą. Ką matote? Jeigu dabar diena, tai matote saulės šviesą, medžius jundančius nuo vėjo, žmones lauke vaikštančius, važinėjančias mašinas. Visa tai negali būti priima kaip dvejetainis kodas. Saulės šviesa negali būti suprantama tik kaip ji yra ar jos nėra. Dienos metu keičiasi jos intensyvumas. Vėjas taip pat nesiskirsto į vėjas yra ir vėjo nėra, jis pučia visą laiką skirtingu stiprumu.

Žemiau esantis paveikslėlis rodo palyginimą tarp skaitmeninio ir analoginio signalo. Kairioje pusėje kampuotos bangos keičia savo reikšmes tarp 0 ir 5 voltų. Kaip ir ankstesnėse pamokose, tai būtų HIGH ir LOW reikšmės. Dešioniojoje pusėje turime bangą panašią į kosinusą. Ši banga taip pat keičiasi tarp 0 ir 5 voltų, bet signalas turi begalinį skaičių reikšmių tarp šių dviejų įtampų.

1

Analoginiai signalai tai tie, kurie nėra diskretieji. Jie gali kisti tam tikrame intervale ir teoriškai turėti begalinį reikšmių skaičių. Kaip pavyzdį paimkime saulės šviesą, kurią nurėtume išmatuoti kaip analoginį signalą. Aišku mums reikia ribų kuriose matuosime. Paprastai matuojama liuksais arba liumenais. Jeigu imtume liuksais tai reiktų rinktis tarp 0 liuksų (visiška tamsa) ir 130.000 liuksų tiesioginės saulės šviesos. Jeigu jūsų prietaisas bus be galo tikslus, jūs galėsite išmatuoti begalinį skaičių reikšmių tarp šių intervalo ribų. Pavyzdžiui patalpos viduje gali būti 400 liuksų. Jeigu bus nors truputį šviesiau tai bus 401 liuksas, tada 401,1 liuksas, tada 401,11 ir taip toliau. Kompiuterio sistema negali išmatuoti begalinių reikšmių, nes atmintis yra baigtinio dydžio. Kaip tokiu atveju Arduino bendrauja su „tikru pasauliu“? Atsakymas – analoginio konvertavimas į skaitmeninį (ADC – analog digital convert) su tam tikru tikslumu ir greičiu.

 

Analoginio signalo konvertavimas į skaitmeninį

 

Tarkime jūs matuosite kambario šviesumą. Darome prielaidą, kad geras šviesos jutiklis gali išskirti kintančią įtampą, kuri keisis nuo apšviestumo. Kai bus visiška tamsa, tai įtampa bus 0V, kai bus visiška šviesa tai bus 5V, bei tarpinės įtampos, priklausančios nuo apšvietimo. Visa tai puiku, bet kaip skaitant šias reikšmes su Arduino, reikia suprasti koks kambario apšvietimas? Galima panaudoti konverterį, kuris analoginius signalus pakeis į atitinkamus skaitmenius, su kuriais Arduino jau galės pradėti dirbti.

Konverterio, t. y. ADC tikslumas priklauso nuo raiškos. Su Arduino Uno bus naudojamas 10 bitų ADC. Tai reiškia, kad ADC padalins analoginį signalą į 210 skirtingų reikšmių. Paskaičiavus gauname, kad tai lygu 1024. Reiškia Arduino gali priimti reikšmes nuo 0 iki 1023. Jei lygintume su 0 ir 5 voltais, gautume, kad 2.5 volto duotų 512 dydį (pusė 1023), o 5 voltai duotų 1023. Kad lengviau suprastumėte, pažiūrėkite į žemiau esantį paveikslėlį.

2 

 

Jeigu naudosime 3 bitų konverterį, tai gausime viso 8 skirtingas reikšmes. Reiškia visos tarpinės bus priskiriamos kažkuriai reikšmei iš intervalo [0;7]. Kuo didesnė raiška, arba kuo didesnis bitų skaičius, tuo tikslesnes reikšmes gauname 

 

Analoginių sensorių skaitymas su Arduino: analogRead()

 

Dabar jūs jau suprantate kaip vyksta signalų konvertavimas. Tai galima panaudoti rašant programas ir sudarant grandines. Skirtingi Arduino turi skirtingą analoginių įėjimų pin‘ų skaičių, bet juos visus galima naudoti su komanda analogRead(). Pirmiausia reiktų išbandyti potenciometrą. Tada išmokti dirbti su įtampos dalikliais ir galėsite kurti savo analoginius jutiklius. 

 

Potenciometro skaitymas

 

Vienas suprantamiausių analoginių sensorių yra potenciometras. Jūs juos pastoviai naudojate namuose įvairiuose grotuvuose, termostatuose, mašinose, viryklėse ir t.t. Potenciometras yra įtampos daliklis ir atrodo kaip rankenėlė.  Jie gamina įvairių dydžių ir formų, bet visi turi 3 pin‘us. Vienas pin‘as jungiasi į įžeminimą, kitas prie 5 voltų. Potenciometrai yra simetriški, todėl nėra svarbu kurią pusę prijungsite prie įžeminimo ir 5 voltų. Vidurinį pin‘ą jungsime į analoginio signalo skaitymo 0 (A0) lizdą. Žemiau parodyta kaip teisingai pajungti potenciometrą.

3

 

Kai pasuksite potenciometrą, jūs gausite skirtingas įtampos reikšmes tarp 0 ir 5 voltų ir jos bus nusiųstos į įėjimo lizdą. Norint, galima patikrinti reikšmes su multimetru, prijungdami jį kaip parodyta ir žiūrėdami reikšmes ekrane tuo metu kai sukinėjame rankenėlę. Raudonas (teigiamas) daviklis turi būti prijungtas prie vidurinio pin‘o, o juodas (neigiamas) prie įžeminimo. Potenciometrai ir multimetrai gali skirtis nuo pavaizduotų, nes kaip ir minėjau jų yra labai įvairių formų. Dar prieš panaudojant multimetrą, galima su Arduinu išspausdinti potenciometro ADC reikšmes ir žiūrėti kaip jos keičiasi. Pasinaudojame funkcija analogRead() ir skaitome reikšmės iš analoginio pin‘o, prijungto prie Arduino, o tada su Serial.println() funkcija viską spausdiname į Arduino IDE serial monitorių. Žemiau multimetro paveiksliuko rasite tam tinkamą kodą. 

4 

 

5

 

Kaip dirbti su serial interfeisu susipažinsite vėliau. Dabar svarbu tik tiek, kad serial interface darbą pradeda nuo setup dalyje esančio Serial.begin(), kuris priima tik vieną argumentą nurodantį komunikacijos greitį ar perdavimo spartą. Perdavimo sparta nurodo kiek bitų bus persiunčiama per vieną sekundę. Kuo didesnė sparta tuo daugiau duomenų perduodama per tą patį laiko tarpą, bet tai gali sukelti tam tikras perdavimo klaidas. 9600 yra įprasta sparta. Ją naudosime visuose darbuose.

Kiekviena iteracija cikle priskiria kintamąjam val reikšmes, gautas iš ADC, kurias perskaitė iš analoginio pin‘o numeri 0. analogRead() komanda reikalauja iš ADC pin‘o numerio su kuriuo šiuo metu yra dirbama. Šiuo atveju 0, nes ten prijungtas potenciometras. Galima rašyti ir A0, bet 0 duodą tą pačią reikšmę ir tai yra greičiau. Kai reikšmė yra perskaitoma (skaičius tarp 0 ir 1023), Serial.println() išspausdins eilę skaičių į kompiuterio serial terminalą. Ciklas darys pusės sekundės pauzes ir procesas kartosis iš naujo.

Kai nusiųsite šį kodą į Arduino, pastebėsite, kad TX LED‘as esantis Arduino mikrokontrolerio plokštėje pradės mirksėti kas 500 ms. Šis LED‘as rodo, kad Arduino persiunčia duomenis į serial terminalą per USB kabelį. Paspauskite apvestą mygtuką, kad paleisti serial monitorių.

6

 

Kai paleisite serial monitoriųm jūs matyse langą su besikeičiančiais skaičiais. Pasukus potenciometra, pastebėsite, kad skaičiai pradėjo mažėti arba didėti. Sukant viena kryptimi skaičiai artės prie 0, o kita prie 1023. Žemiau matote kaip tai atrodo.

7

 

Ką gi, manau, kad jums visai neblogai pavyko ir buvo įdomu. Jei ne, tai žinokite, kad čia tik pirmas žingsnis. Toliau susipažinsime su kitais analoginiais davikliais ir sužinosime kaip skaityti duomenis iš jų. Dabar jūs jau galite naudoti LED‘us, o vėliau valdysime ir variklius ar kitus įtaisus.

 

Analoginių daviklių panaudojimas

 

Nors potenciometras generuoja analogines įtampos reikšmes, jis nėra laikomas tikru davikliu. Jis jaučia rankenėlės sukiojimą, bet tai greitai nusibosta. Gerai yra tai, kad tikrieji davikliai generuoja analoginius signalus reaguodami į „realaus pasaulio“ veiksmus. Pavyzdžiui:

   • Akselerometrai nustato pagreitį ir jaučia gravitaciją (dauguma telefonų juos turi)
   • Magnetometrai matuoja magnetinius laukus (galima sukurti skaitmeninį kompasą)
   • Infraraudonųjų spindulių davikliai gali išmatuoti atstumus iki objektų
   • Temperatūros davikliai gali pasakyti apie aplinką


 

Papildomos užduotys:

1. Potenciometro pagalba įjungti išjungti 6 led'us vienu metu.

2. Potenciometro pagalba  palengva įžiebti 6 led'us vienu metu.

3. Potenciometro pagalba įžiebti led'us vieną po kito.

 

 

Add comment

Security code
Refresh