V tem članku bomo pokazali, kako povezati alfanumerični displej (LCD) z Arduino UNO ploščico in kako ga izkoristiti za prikaz napetosti in temperature, ki jo bere temperaturni senzor LM35.
Alfanumerični displej
Slika 31 prikazuje alfanumerični displej iz Geekcreit kompleta. Displej je vrste 16×2, kar pomeni, da lahko prikaže dve vrstici teksta s po 16 znakov v vsaki vrstici. Vsak znak se formira v matrici dimenzij 5×8 pikslov, v internem spominu so pa shranjene črke angleške abecede, številke 0-9, ločila in drugi znaki, ki jih običajno srečamo na tipkovnicah osebnih računalnikov, nekaj grških in nekaj sto kitajskih črk. LCD ima lasten kontroler, zato nam ni potrebno skrbeti za multipleksiranje in z njim je na splošno precej enostavneje delati, kot z LED displeji, ki smo spoznali v predhodnem članku.
LCD bomo z Arduino UNO ploščico povezali preko 6-bitnega vodila, po shemi na sliki 32. Linije D7-D4 prenašajo podatek ali ukaz, E in RS pa sta krmilni liniji. Na Arduino strani lahko vodilo povežemo na katere koli 6 priključkov – mi smo izkoristili priključke 2-7. (Opomba: obstaja tudi drugi način povezovanja, ki ga tukaj ne bomo analizirali!)
Ta vsebina je samo za naročnike
Če želite odkleniti to vsebino, se naročite.
LCD iz Geekcreit kompleta uporablja napetost napajanja 5 V, in to za napajanje elektronike (priključka 1 in 2) in za osvetlitev ozadja (priključka 15 in 16). Osvetlitev ozadja troši 20-30 mA toka, medtem ko je poraba elektronskih vezij nekaj desetkrat manjša. Ker to ne predstavlja obremenitve za Arduino UNO ploščico, smo napetost napajanja LCD-a prav tako “potegnili” iz Arduina. Čitljivost prikazanih znakov je odvisna od kontrasta, ki ga nastavljamo s trimerjem P2.
Slika 33 prikazuje kako bomo komponente s slike 32 postavili na veliko testno ploščico. Tukaj moramo poudariti, da v Geekcreit kompletu ne obstaja ustrezen trimer P2, zato ga bomo morali dokupiti! Na testno ploščico bomo najlažje postavili večobratni trimer, ki je na sliki 33 tudi narisan. Lahko ga nadomestimo s fiksnima uporoma upornosti 10 kΩ in 1 kΩ iz kompleta (R1 in R2). Te komponenti sta na sliki 32 obarvani z rdečo barvo, modifikacija pa je prikazana na desni strani slike 33. Ker imata upora fiksno vrednost upornosti, nastavljanje kontrasta ne bo možno, vendar bi prikaz na displeju moral biti jasen.
Razen prikaza sporočila, ki mu ga je Arduino program poslal preko vodila, LCD pozna tudi nekaj ukazov, katerih pomen zgoščeno prikazan v tabeli 3. Delo z alfanumeričnim displejem bomo ilustrirali v naslednjem programskem primeru.
9. programska naloga
Napišite program za vezje s slik 32 in 33, ki bo bral napetost na drsniku potenciometra P1 in jo prikazal na alfanumeričnem displeju na naslednji način:
v gornjem vrstici je potrebno izpisati prebrano vrednost v obsegu 0-1023, to je v obliki, ki jo dobimo iz A/D pretvornika mikrokontrolerja;
v spodnji vrstici je potrebno izpisati ustrezno napetost v obsegu 0,00-5,00 V!
Pričakovani prikaz na displeju vidimo tudi na sliki 32 zgoraj!
Arduino rešitev (program Geekcreit_9.ino)
Za delo s alfanumeričnim displejem moramo uporabiti knjižnico funkcije LiquidCrystal. Nato definiramo objekt z imenom lcd in sočasno dodamo komunikacijske priključke:
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
V funkciji setup() definiramo vrsto alfanumeričnega displeja, ki ga uporabljamo:
void setup() {
lcd.begin(16, 2);
Parametri funkcije lcd.begin(16,2) ustrezajo displeju z 2 vrstama in s po 16 znakov v vsaki vrstici. Po definiciji displeja se izpis avtomatično prične od prvega mesta v gornji vrstici.
Tekst in vrednosti spremenljivk izpisujemo na displeju s pomočjo funkcije lcd.print(). Mi bomo najprej izpisali sporočilo v gornjem levem vogalu displeja:
lcd.print(“A/D izhod:“);
}
V funkciji loop() bomo prebrali stanje na analognem vhodu A0 in ga shranili v spremenljivki potValue. Izpis prebrane vrednosti je potrebno pričeti od 13 stolpca prve vrste, na želeno pozicijo se bomo premaknili s funkcijo lcd.setCursor():
void loop() {
int potValue = analogRead(A0);
lcd.setCursor(1-2,0);
Funkciji smo poslali vrednosti 12 in 0, ker stolpce in vrste šteje od ničle. Želimo, da je izpis številke poravnan v desno oziroma, da se številka enic vedno izpisuje kot zadnji znak v prvi vrstici.
Da bi to dosegli, moramo odkriti koliko številk ima prebrana vrednost potenciometra. To bomo napravili s pomočjo if-elseif-else ukaza, v katerem sočasno izpisujemo tudi potrebno število praznih mesta:
if (potValue > 999 ) {
} else if (potValue > 99) {
lcd.print(“”);
} else if (potValue > 9) {
lcd.print(“”);
} else {
lcd.print(“”);
}
lcd.print(potValue);
Postavljamo kurzor na začetek druge vrste in izpisujemo začetni tekst in postavljamo kurzor na pozicijo, od katere bomo izpisali vrednost napetosti:
lcd.setCursor(0, 1);
lcd.print(“napetost:”);
lcd.setCursor(11,1);
Prebrano vrednost moramo preračunati v napetost v obsegu 0-5 V in prikazati z dvema decimalnima mestoma. Zato definiramo novo spremenljivko napetost vrste float:
float napetost = potValue *
(5.0 / 1023.0);
Opazili boste da smo celoštevilčne vrednosti 5.0 in 1023.0 morali pisati z decimalnimi pikami; v nasprotnem izračun ne bi bil točen. Sedaj lahko izpišemo vrednost, ki smo jo dobili s preračunavanjem in oznako merilne enote V; ukaz lcd.print() bo avtomatsko zaokrožil izpis na dve decimalki:
lcd.print(napetost);
lcd.print(“V“);
delay(1000);
}
Pogostost prikaza smo upočasnili z ukazom delay(); če želimo, da izpis hitreje sledi spremembe vhodne napetosti, lahko parameter 1000 zmanjšamo.
Temperaturni senzor LM35
Integrirano vezje LM35 je precizni temperaturni senzor, uporaben v širokem temperaturnem obsegu od -55°C do 150°C. Njegova izhodna napetost je linearno proporcionalna temperaturi okolice s pretvornim faktorjem 10 mV/°C. Točnost na sobni temperaturi je boljša od 1°C, v celotnem temperaturnem obsegu napaka merjenja ni večja od ±1,5°C. To so mejne vrednosti; pričakovane tipične vrednosti so manjše od 0,5°C znotraj vrste celotnega merilnega razpona. Kakšen je ta merilni razpon je odvisno od oznake na integriranem vezju: v Geekcreit kompletu se nahaja najcenejši član družine, LM35DZ, predviden za merjenja temperature od 0°C do 100°C.
LM35DZ se nahaja v TO-92 ohišju, kot mali “plastični“ tranzistorji; razpored priključkov in način povezovanja z Arduino UNO ploščico sta prikazana na sliki 34. Z merjenjem napetosti na analognem vhodu A0 bomo določili temperaturo in jo prikazali na LCD-ju! LM35 je tovarniško kalibriran tako da ima izhodno napetost pri 0°C enako 0 V, oziroma, napetostna vrednost številčno ustreza izmerjeni temperaturi (250 mV = 25°C). To je zelo praktična lastnost, vendar potegne s sabo tudi slabost: za merjenje negativnih temperatur bomo potrebovali tudi negativno napajalno napetost.
V shemi na sliki 34 nismo predvideli izvor negativne napetosti, ker naš LM35DZ sploh ni ustrezen za merjenje negativnih temperatur, pa tudi mikrokontroler ne more meriti negativnih napetosti! Po tehnični dokumentaciji proizvajalca LM35 v takšni vezavi lahko precizno meri samo temperature višje od 2°C.
Komponente na slike 34 bomo postavili na veliko testno ploščico po risbi na sliki 35. Ker je potenciometer P1 izgubil svojo predhodno funkcijo, ga bomo izkoristili za nastavljanje kontrasta LCD-ja.
10. programska naloga
Napišite program za vezje na slikah 34 in 35, ki bo bral izhodno napetost temperaturnega senzorja LM35, preračunajte prebrano vrednost v temperaturo in jo prikažite na alfanumeričnem displeju na naslednji način:
v gornji vrstici je potrebno izpisati prebrano vrednost v obsegu 0-1023, to je v obliki ki jo dobimo iz A/D pretvornika mikrokontrolerja;
v spodnji vrstici je potrebno izpisati ustrezno temperaturo v °C z enim decimalnim mestom!
Pričakovani prikaz na displeju vidimo tudi na sliki 34 zgoraj!
Arduino rešitev (program Geekcreit_10.ino)
Programska rešitev je zelo podobna predhodni, zato bomo opisali samo razlike v programu. V 9. nalogi smo brali napetost drsnika potenciometra, ki smo jo menjali v obsegu 0-5 V; zato je bilo logično, da kot napetostno referenco uporabimo napetost napajanja, to je 5 V. Sedaj merimo napetosti znotraj vrste znatno manjšega razpona: če kot spodnjo mejo predpostavimo prej omenjenih 2°C, kot zgodnjo pa 50°C, bo izhodna napetost v obsegu 20-500 mV. Takšno napetost bomo precej bolj precizno merili kadar kot referenčno napetost izberemo interno napetostno referenco (1,1 V). To bomo naredili s pomočjo ukaza analogReference() ki mi posredujemo eno od teh treh vrednosti:
DEFAULT – referenca je 5 V (na Arduino ploščicah ki so napajane s 5 V) ali 3,3 V (na Arduino ploščicah, ki so napajane s 3,3 V);
INTERNAL – interna referenca Atmega168 ali ATmega328P mikrokontrolerja, tipično 1,1 V in
EXTERNAL – referenčna napetost je vezana na priključek AREF (mora biti med 0 V in napetostjo napajanja Arduino ploščice).
V funkciji setup() definiramo da bomo uporabili interno referenčno napetost, in nato konfiguriramo LCD:
void setup() {
analogReference(INTERNAL);
lcd.begin(16, 2);
lcd.print(“A/D izhod:“);
}
Začetek loop() funkcije, v kateri izpisujemo branje je identičen predhodnemu programu, razen kar smo spremenili ime spremenljivke za shranjevanje branja v lm35Value:
void loop() {
int lm35Value = analogRead(A0);
lcd.setCursor(12,0);
if (lm35Value > 999 ) {
} else if (lm35Value > 99) {
lcd.print(““);
} else if (lm35Value > 9) {
lcd.print(““);
} else {
lcd.print(““);
}
lcd.print(lm35Value);
Izpisujemo začetek druge vrste in znak plus:
lcd.setCursor(0, 1);
lcd.print(“temp:“);
lcd.setCursor(9,1);
lcd.print(“+“);
Preračunavamo prebrano vrednost senzorja v milivolte, nato milivolte v °C, in na koncu izpišemo rezultat:
float napetost = lm35Value * (1100.0 / 1023.0);
float temperature = napetost / 10.0;
lcd.print(temperature,1);
lcd.print(char(223));
lcd.print(“C“);
delay(1000);
}
Drugi parameter ukaza lcd.print() določa, da želimo prikaz z enim decimalnim mestom. Znak za stopinje izpisujemo kot char(223), ker je v internem spominu definiran na naslovu 223.
Za tiste ki želijo vedeti več
Če imamo na voljo integrirani senzor LM35CZ ali LM35CAZ, bi lahko merili tudi temperature v negativnem temperaturnem področju, vse do -40°C. Proizvajalec predlaga modifikacije osnovnega vezja, ki so prikazane na sliki 36. Te omogočajo merjenje negativnih temperatur tudi brez dodatnega vira negativne napetosti. Modifikacija prikazana na sliki 36 levo omogoča merjenja v obsegu od -5°C do +40°C. Pretvorni faktor je ostal 10 mV/°C, vendar temperatura 0°C več ne ustreza izhodni napetosti 0 V, ampak 100 mV, zato je potrebno ustrezno popraviti program.
Modifikacija prikazana na sliki 36 desno omogoča merjenja v polnem temperaturnem obsegu, od -40°C do +110°C, in spet s pretvornim faktorjem 10 mV/°C. Dodatna komplikacija pri tej rešitvi je to, da je sedaj poleg izhodne napetosti temperaturnega senzorja potrebno meriti tudi napetost na diodah 1N914. Razlika teh napetosti je nato proporcionalna temperaturi okolice.
Zamenjave osnovnega vezja so na sliki 36 obarvane z modro barvo. Upori upornosti 200 Ω, 2 kΩ in 18 kΩ, diode 1N914 (lahko jih zamenjate z diodami 1N4148) in senzor LM35CZ niso sestavni del Geekcreit kompleta! Če prilagodite program, lahko preverite, kako te modifikacije delajo tudi s senzorjem LM35DZ iz kompleta: točnost bo nekaj slabša, vendar bo vezje v principu delovalo.
Seveda, če želimo meriti temperature, ki pomembno odstopajo od sobne temperature, bomo senzor morati izločiti in ga povezati z eksperimentalno ploščico s pletenico (twisted pair). To zmanjšuje vpliv motenj iz okolice na točnost merjenja, priporočila za povezovanje lahko najdete v tehnični dokumentaciji proizvajalca integriranega vezja. V vezju na sliki 36 levo skupaj s senzorjem bomo izločili tudi “zgornja“ dva upora, vplesti bi bilo treba tudi vodnike, ki so obarvani rdeče. V vezju na sliki 36 desno bomo izločili samo senzor, vplesti bi bilo treba vse tri vodnike vezane na njegove priključke.
Opomba: Programe Geekcreit_9.ino in Geekcreit_10.ino lahko brezplačno dobite od uredništva revije Svet elektronike.
Spoštujemo vašo zasebnost in se zavezujemo, da bomo osebne podatke, pridobljene prek spletnega informacijskega sistema, skrbno varovali in jih brez vaše privolitve ne bomo posredoval tretji osebi oziroma jih uporabili v druge namene. Ker obstajajo v spletnem informacijskem sistemu določene povezave na druge, zunanje spletne strani, ki niso vezane na nas, ne prevzemamo nobene odgovornosti za zaščito podatkov na teh spletnih straneh.
Hkrati se zavezujemo, da bomo po svojih najboljših možnih močeh varovali podatke in zasebnost obiskovalcev spletne strani .
Da bi preprečili nepooblaščen dostop do pridobljenih podatkov ali njihovo razkritje, ohranili natančnost osebnih podatkov in zagotovili njihovo ustrezno uporabo, uporabljamo ustrezne tehnične in organizacijske postopke za zavarovanje podatkov, ki jih zbiramo.
Piškotki, ki so nujno potrebni za delovanje spletne strani
Nujno potrebne piškotke bomo na vašo napravo vedno nameščali, saj brez njih naša spletna stran ne deluje pravilno. Med nujno potrebne piškotke uvrščamo piškotke, ki vam omogočajo dostop do spletne strani, delovanje posameznih funkcionalnosti spletne strani in hkrati ne zbirajo analitičnih ali drugih podatkov o vašem obisku.
Ime piškotka
Trajanje
Opis
PHPSESSID
dokler ne zaprete brskalnika
Piškotek omogoča shranjevanje sej med posameznimi zahtevami znotraj sistema za upravljanje z vsebinami.
moove_gdpr_popup
1 leto
Shrani uporabnikove preference politike piškotkov
Če onemogočite ta piškotek, ne bomo mogli shraniti vaših nastavitev. To pomeni, da boste morali vsakič, ko obiščete to spletno mesto, ponovno omogočiti ali onemogočiti piškotke.
Piškotki tretjih oseb
Med piškotke tretjih oseb spadajo analitični in funkcijski piškotki, ki jih na vašo napravo nameščajo druga podjetja, kot so Facebook Inc. in Google Inc.. Ti piškotki vam omogočajo uporabo vtičnikov in funkcij na naši strani, ki so povezane z njihovimi družbenimi omrežji in drugimi platformami ter za sledenje vaši uporabi njihovih storitev.
Ime piškotka
Trajanje
Opis
_ga
2 leti
Google Analytics Zabeleži razlikovanje med uporabniki in sejami.
_gid
1 leto
Google Analytics Zabeleži novo sejo ali novega uporabnika.
_gat
10 min
Google Analytics piškotek se uporablja za omejevanje pogostosti zadetkov..
IDE
2 leti
Oglaševalski piškotek podjetja Google Inc. Ki nam omogoča prikazovanje oglasov.
Najprej omogočite strogo potrebne piškotke, da lahko shranimo vaše nastavitve!
Uporaba piškotkov na spletišču
Spletišče v brskalnik računalnika obiskovalca oziroma uporabnika odloži tako imenovani “piškotek”. Piškotki so tekstovne datoteke, ki se shranijo na uporabnikovem računalniku in omogočajo analize o uporabnikovem obisku, številu obiskov in kaj ga zanima v teh obiskih. V piškotku so osnovni podatki o uporabnikovem obisku določene spletne strani, npr. ime obiskovane spletne strani, ki jih opravi v spletišču. Vsebina piškotka se shrani v računalniku uporabnika v posebni mapi. Z dvakratnim klikom na datoteko dobimo podrobnejše informacije o obiskani spletni strani, datumu in uri obiska. Vsi ti podatki so shranjeni tudi pri upravljavcu spletne strani, ki jo uporabnik obiskuje.
Uporabnik lahko piškotke z določenimi nastavitvami briše, izključuje oziroma jih pogojno uporablja, a posledično uporabnik ne bo mogel uporabljati vseh funkcij spletišča v polni meri. V osnovi so brskalniki nastavljeni tako, da piškotke sprejemajo, zavračajo pa nastavljanje piškotkov, ki ne izvirajo iz področja, zapisanega v naslovni vrstici.