0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaNova številkaPametni trezor (1) - opis projekta in programske logike

    Pametni trezor (1) – opis projekta in programske logike

    Avtor: mag. Vladimir Mitrović
    Pametni trezor, ki ga opisujemo, so izdelovali udeleženci STEM delavnic za srednješolce v letu 2023. Te delavnice tradicionalno organizira Hrvaška skupnost tehnične kulture med letnimi šolskimi počitnicami, s ciljem osvajanja raznih tehničnih veščin in znanja.
    Trezor bomo opisati v treh nadaljevanjih:
    • opis projekta in programske logike
    • opis krmilne ploščice
    • navodila za uporabo in pojasnitev interesantnih delov programa
    Trezor je sestavljen iz mehanske konstrukcije narejene iz vezane plošče in delov natisnjenih na 3D tiskalniku, elektronske podpore in vira napajanja. Izgled trezorja je prikazan na sliki 1.

    Telo trezorja je napravljeno iz vezane plošče, je pravokotne oblike z izbočeno polkrožno odprtino. Odprtino zapira dvoje vrat polkrožne oblike: notranja vrata so neprosojna, zunanja pa so mrežasta, tako da se skozi njih vidi vsebina trezorja. Ideja konstruktorja je, da pogled skozi mrežasta vrata uporabniku omogoči, da vidi njegovo vsebino, vendar pa še ne more priti do nje (slika 2). Oboje vrat je natisnjenih na 3D tiskalniku.

    Vrata odpirata in zapirata dva koračna elektromotorja: eden direktno krmili notranja vrata, drugi krmili zunanja vrata preko zobniškega prenosa, ki je prav tako natisnjen na 3D tiskalniku. Koračna motorja sta izbrana zato, ker lahko njun položaj zelo precizno krmilimo. Koračna motorja in ostale elektronske komponente trezorja krmili vezje na sliki 3.
    Srce krmilnega vezja je Arduino Nano z mikrokontrolerjem ATmega328P. Poleg njega se na krmilnem vezju nahajata dve integrirani vezji, napetostni stabilizator, piskač in nekaj konektorjev, na katere bomo vezali zunanje komponente. Koz izvor napajanja uporabimo omrežni adapter; njega vežemo na priključek VIN (na sliki se nahaja zgoraj levo). Napetost s priključka VIN se dovaja na vhod močnostnega napetostnega stabilizatorja LM2940 (na sliki se vidi zgoraj desno), preko katerega se napajata motorja, kot tudi priključek VIN vhod Arduino Nano ploščice. Arduino ima svoj lasten napetostni stabilizator, ki skrbi, da mikrokontroler in ostala vezja na ploščici dobijo stabilnih 5 V, ki so potrebni za njihovo delo. Preostali dve integrirani vezji omogočata pogon koračnih motorjev:
    večji od njiju, ULN2803A, vsebuje 8 elektronskih vezij, s katerimi se vključujejo posamezni ovoji koračnih motor: v njihovih navitjih tečejo tokovi, ki so večji od 100 mA in bi, če bi bila navitja vezana direktno na njegove priključke, preobremenile mikrokontroler in uničile njegove izhode;
    manjši, 74HC595, je vmesnik med mikrokontrolerjem  in elektronskimi vezji: vmesnik omogoča, da mikrokontroler krmili vseh 8 elektronskih vezij s samo tremi krmilnimi linijami.
    Opazili boste, da na krmilni ploščici niso postavljene vse komponente. Razlog za to je v tem, ker se v tem projektu uporablja samo del možnosti, katere ploščica omogoča – podrobneje jo bomo preučili v naslednjem nadaljevanju!

    Tipkovnica, prikazana na sliki 4, služi za vnos šifer, a katerimi odpiramo in zapiramo vrata, pa tudi za nastavljanje trezorja. Poleg numeričnih tipk „0“ do „9“ se na njej nahaja še tipka „C“ za brisanje in tipka „OK“ za potrditev vnosa. Če bi želeli, da bi tipke bile neodvisne, bi za nadzor stanja vseh 12 tipk bilo potrebnih 12 priključkov mikrokontrolerja. Takšen pristop ni racionalen, zato so tipke vezane tako, kot so tudi razmeščene na ploščici: v matrico v štirih vrsticah in treh stolpcih. Vsaka vrstica in vsak stolpec imata svoj priključek, tako da jih na robu ploščice vidimo skupaj 7. Če pritisnemo npr. tipko 2, se bodo spojili priključki, ki ustrezajo prvi vrstici in drugemu stolpcu.

    V tako vezani tipkovnici se tipke ne morejo brati direktno, pač pa po postopku multipleksiranja: vrstica po vrstica ali stolpec po stolpec. Da bi mikrokontrolerju olajšali delo in še zmanjšali potrebno število njegovih priključkov, smo tipkovnici dodali ploščico z integriranim vezjem PCF8574 (na sliki 4 desno), ki jo postavimo na hrbet tipkovnice (na sliki 4 v sredini). PCF8574 nadzira stanja priključkov tipkovnice in jih shranjuje v lasten spomin. Mikrokontroler komunicira s PCF čipom preko I2C vodila s samo dvema linijama: SCL in SDA. Da bi mikrokontroler lahko dostopal do PCF čipa, mu je potrebno pravilno postaviti naslov: v našem primeru bomo s kapljico cina kratko vezali kontakte A0 (to na sliki ni jasno vidno).
    Mikrokontroler bo izpisoval različna sporočila na alfanumeričnem displeju (LCD, slika 5). LCD prikazuje sporočila v dveh vrstah, vsako sporočilo je lahko dolgo do 16 znakov. Tudi tukaj smo na hrbet LCD-ja postavili ploščico s PCF8574 čipom in tako zmanjšali potrebno število krmilnih priključkov mikrokontrolerja. Da bi mikrokontroler lahko razlikoval LCD od tipkovnice, morajo vsi trije naslovni kontakti A0, A1 in A2, ostati odprti. Povejmo še, da sta LCD in njegova PCF ploščica tovarniške izdelave, medtem ko so vse ostale ploščice udeleženci STEM delavnic morali sami pospajkati po navodilih in nadzorom vodje delavnice!
    Na sliki 5 spodaj desno je prikazana mala ploščica, na katero je postavljena večbarvna (RGB) svetleča dioda. RGB diodo vežemo na priključke LED1 krmilne plošče, barva svetlobe, s katero sveti, je odvisna od trenutne faze izvrševanja programa. Posamezne aktivnosti, kot pritiska na tipko ali opozorila, da je na displeju izpisano novo sporočilo, so pospremljene tudi z zvočnimi signali. Zvok oddaja piskač, ki je nameščen na ploščici krmilnega vezja.
    Slika 6 prikazuje električno shemo, slika 7 pa razpored komponent na ploščici krmilnega vezja. Na obeh slikah so prekrižane komponente, katere v tem projektu ne uporabimo. Kako posamezne dele povezati s krmilnim vezjem je nazorno prikazano na sliki 8. Tukaj smo z načrta ploščice krmilnega vezja zbrisali komponente in priključke, ki nam niso potrebni.
    Koračne motorje vežemo na priključke STEP1 in STEP2. Ohišje priključkov ima utore, ki zagotavljajo, da lahko motorje vežemo samo na en, pravilen način.
    Konektorji, ki so označeni z oznako I2C, so namenjeni za priključek tipkovnice in alfanumeričnega displeja. Na hrbet tipkovnice in LCD-ja postavljamo njuni komunikacijski ploščici s PCF8574 čipoma in nato te ploščice povežemo z I2C priključkoma na ploščici krmilnega vezja. Priključka sta identična in je nepomembno, katera ploščica bo povezana s katerim od njiju. Vendar pa moramo paziti, da bodo istoimenski priključki (GND, VCC, SDA in SCL) medsebojno povezani. Na sliki 8 so z rdečo barvo označeni naslovni priključki A2, A0 in A1 na obeh ploščicah. Opazili boste, da je treba priključke A0 na komunikacijski ploščici tipkovnice premostiti s kapljico cina, medtem ko vsi ostali naslovni priključki na obeh ploščicah ostanejo odprti.
    Ploščico RGB diode povežemo na priključke LED1. Pri tem pazimo, da medsebojno vežemo istoimenske priključke (B, G, AK in R). Priključki B, G in R vklapljajo po vrsti modri, zeleni in rdeči segment LED-ice, medtem ko je AK skupna anoda ali katoda. Ploščica podpira obe izvedbi, vrsto LED-ice pa definiramo v programu. Tok skozi posamezne segmente določajo upori R2, R3 in R4 na krmilni ploščici. Včasih se intenzivnost barv medsebojno precej razlikuje; v našem primeru je zelena barva bila zelo poudarjena, zato smo njen upor R3 morali zamenjati z uporom z večjo upornostjo od tiste navedene v shemi.
    Omrežni adapter priključimo na priključek VIN. Adapter mora zagotoviti tok do 1 A, optimalna izhodna napetost je 6,5-9 V. Adapter bo preko napetostnega stabilizatorja LM2940 napajal motorje. Posredno, preko Arduino ploščice, pa mikrokontroler in ostale elektronske komponente. Na shemi boste opazili diodo D2, ki ščiti vezje od obrnjene polaritete vhodne napetosti: uporabljena je Schottky dioda SKL14, na kateri je padec napetosti pri 1 A toka manjši od 0,5 V.
    Pozor! Če je Arduino Nano vezan na USB priključek osebnega računalnika, bo preko njega dobil 5V napajalno napetost. To je v redu dokler programiramo mikrokontroler in tudi dokler preverjamo delo programa in dokler niso priključeni koračni motorji. Če sta sočasno vključena omrežni adapter in USB kabel, to ne bo predstavljalo problema: Arduino Nano ima ustrezno zaščitno vezje, ki lahko učinkovito“izolira“ta dva vira napajanja. Če pa so motorji povezani in ni vključen omrežni adapter, bodo motorji „povlekli“ tok preko Arduino ploščice, kar lahko preobremeni USB priključek ali poškoduje napetostni stabilizator na Arduino modulu!
    Opis programske logike
    Delo pametnega trezorja krmili program vpisan v mikrokontroler Arduino Nano ploščice. Program je napisan v programskem jeziku Bascom-AVR; samega programa tukaj ne bomo podrobneje analizirali, bomo pa preučiti programsko logiko, prikazano na diagramu poteka na sliki 9.
    Na samem začetku programa delamo inicijalizacijo: definiramo potrebne spremenljivke in opišemo na katere priključke mikrokontrolerja so povezani tipkovnica, alfanumerični displej, RGB dioda, piskač in integrirano vezje 74HC595, preko katerega krmilimo koračne motorje – vse to mora biti v skladu z električno shemo na sliki 6.
    Po zaključeni inicijalizaciji bo program na LCD-ju izpisal sporočilo, da je trezor pripravljen preveriti, ali so že definirane šifre za odpiranje in zapiranje vrat. Te šifre so vpisane v trajen spomin mikrokontrolerja (EEPROM) in spomin bo prazen samo ob prvem zagonu programa.
    Če šifre niso definirane, bo program poklical in izvršil rutino RESET, opisano v malem diagramu na strani: začetne vrednosti šifer za odpiranje vrata, „1234“ in „5678“, se bodo vpisale v EEPROM, nato pa se bo omogočilo kalibriranje vrat. V postopku kalibriranja, s pritiski na tipke „1“ in “3“ na tipkovnici, zaženemo najprej zunanja in nato tudi notranja vrata, dokler jih popolnoma ne odpremo. Položaj odprtih vrat potrdimo s pritiskom na tipko „OK“; oboje vrat se bodo zaprla, trezor prehaja v normalni način dela in je pripravljen za uporabo!
    V normalnem načinu delovanja trezor izpisuje sporočilo „Vpiši kodo!“ in pričakuje, da mu vtipkamo štiri-številčno število, ki ustreza eni od šifer za odpiranje vrata. Vsaka vpisana številka je vidna samo 1 sekundo, nakar jo prekrije zvezdica. Če se med vnosom šifre zmotimo, pritisnemo tipko „C“ in pričnemo od začetka. Zaključen vnos potrjujemo s pritiskom na tipko „OK“ (razpored in oznake tipk se vidijo na fotografiji na sliki 4).
    Ko je vnos šifre zaključen, bo program preveril, ali je sklenjen kratkostičnik med priključkoma D13 in GND. Če ta kratkostičnik ni sklenjen, stanje pina D13 (v programu ga imenujemo RST_PIN) ne bo 0 in program nadaljuje z normalnim načinom dela. Tukaj bo najprej preveril, ali vpisana šifra ustreza šifram dodeljenim prvim (notranjim) ali drugim (zunanjim) vratom. Če je ena od preverb ustrezna, bo program aktiviral pridruženi koračni motor, ki bo odprl zaprta ali zaprl odprta vrata (ista šifra zapira in odpira vrata) in nato bo pričakoval vnos nove šifre. Če vpisana šifra ne ustreza niti eni od teh šifer, se bo izpisalo ustrezno sporočilo in pričakovalo vnos nove šifre.
    Če je sklenjen kratkostičnik med priključkoma D13 in GND, bo stanje RST_PIN-a enako 0 in program bo aktiviral konfiguracijski način dela. V tem načinu dela program razpoznava še dve šifri: „0000“ in „9999“.
    Šifra „9999“ omogoča spremembo šifer: program bo zahteval vnos novih šifer za prva in druga vrata. Šifre bodo vpisane v trajen spomin mikrokontrolerja in bodo veljale do naslednje spremembe ali do naslednjega reseta.
    Šifra „0000“ bo poklicala prej opisano RESET rutino in ponovno omogočila kalibriranje vrat. Uporabimo jo takrat, ko trezor želimo postaviti v začetno stanje, ali če so se ena od vrat zataknila in se ne morejo več popolno zapreti¸ali odpreti.
    Posamezne aktivnosti so spremljane s svetlobnimi in zvočnimi učinki. Pritiski na tipke in izpis novega sporočila na displeju so spremljani s kratkim „klikom“, ki ga piska piskač, sporočila opozoril najavlja daljši zvočni signal. Med zapiranjem in odpiranjem vrat RGB dioda sveti zeleno, pri opaženi napaki pa rdeče. Med postopkom kalibriranja se vklopi modra barva, občasno skupaj z zeleno ali rdečo. Barva RGB diode je v diagramu poteka prikazana z barvo“hišice“v katero je vpisana neka aktivnost.
    Zaključek
    Udeleženci STEM delavnic so se spoznali s programsko logiko, posamezne segmente programa so sami preverili na delavnici „Programiranje mikrokontrolerjev“. Mehanično konstrukcijo so udeleženci sestavili na delavnici „Modelarstvo“, tiskane ploščice so zaspajkane na delavnici „Elektrotehnika“. Nekaj zaključnih del je prikazanih na sliki 10; nekateri od njih so personalizirani s podrobnostmi, ki so bile narejene na delavnici „3D modeliranje“.
    Za tiste, ki vedno želijo vedeti več, bomo v naslednjem nadaljevanju podrobno opisali shemo in možnost krmilnega vezja, ki presega tisto, ki smo ga uporabili pri pametnemu trezorju.
    Opombe:
    Program Sef_SE.bas in knjižnica I2CLCD.sub se lahko brezplačno dobita v uredništvu revije Svet elektronike.
    Trezor si je zamislil in mehanično konstrukcijo izdelal sodelavec HZTK, Zvonimir Lapov-Padovan. Program mikrokontrolerja in dizajn tiskanih ploščic je podpisal avtor tega članka.