Avtor: mag. Vladimir Mitrović
E-pošta: vmitrovic12@gmail.com
2019_277_36
Barduino (18): Bascom-AVR programi za module iz 37-in-1 kompleta (2): tipke, Reed rele, senzor nagiba, senzor vibracije, senzor udarca, senzor magnetnega polja, temperaturni senzor, fotoupor, joystik.
Spoznavamo module iz kompleta “37-in-1” in predstavljamo ustrezne Bascom-AVR programe. Module bi lahko razvrstili v naslednje skupine:
- moduli z digitalnimi izhodi;
- moduli z analognimi izhodi;
- moduli z digitalnimi in analognimi izhodi;
- moduli z digitalnimi vhodi;
- moduli, ki vsebujejo senzorje ali druge elektronske komponente, ki podpirajo neki komunikacijski protokol (za vzpostavitev komunikacije s temi moduli, je potrebno napisati ustrezne programe) in
- moduli, ki delajo takoj, ko se jih priklopi na napajalno napetost in ne zahtevajo nikakršne programske podpore.
Pregled modulov z digitalnimi izhodi
Vsi moduli iz te skupine imajo tri priključke, katerih oznake so “-“, “+” in “S” (razpored priključkov se lahko razlikuje iz prikazanih na slikah!). Priključek “-” se veže na maso oziroma GND priključek Arduino ploščice, medtem ko se priključka “+” opcijsko veže na 5 V (večina modulov iz te skupine bo delala tudi, če se priključka “+” pusti “v zraku”). Odvisno od stanja senzorja, elektronskega elementa ali vezja na modulu, bo izhodni priključek “S” prevzel napetostne nivoje 0 V ali 5 V, oziroma logična stanja “0” ali “1”. Praviloma je izhodni priključek v stanju “0” kadar je senzor na modulu aktiviran.
Ta vsebina je samo za naročnike
KY-004, tipka (Key Switch Module, slika 88a)
Modul je sestavljen iz tipke S1 in pull-up upora R1. S pritiskom tipke naredimo kratek stik med priključkom “S” in “-” in s tem postavljamo izhodni priključek “S” v stanje “0”. Če se vključi pull-up upor ustreznega vhoda mikrokontrolerja, priključka “+” ni potrebno vezati na napetost napajanja.
KY-021, reed relej (Mini Magnetic Reed Switch Module, slika 88b)
Modul je sestavljen iz senzorja magnetnega polja (reed rele S1) in pull-up upora R1. Če približamo senzorju stalni magnet, oziroma ko ga postavimo v magnetno polje ustrezne jakosti, se bo kontakt releja sklenil in napravil kratek stik med priključkoma “S” in “-” in tako postaviti izhodni priključek “S” v stanje “0”. Če se vključi pull-up upor ustreznega vhoda mikrokontrolerja, priključka “+” ni potrebno vezati na napetost napajanja.
KY-020, senzor nagiba (Tilt Switch Module, slika 88c)
Modul je sestavljen iz senzorja nagiba (S1, SW-520D ali sl.) in pull-up upora R1. Odvisno od nagiba senzorja se bodo njegovi kontakti sklenili ali odprli in tako postaviti izhodni priključek “S” v stanje “0” ali “1”. Če se vključi pull-up upor ustreznega vhoda mikrokontrolerja, priključka “+” ni potrebno vezati na napetost napajanja.
KY-017, senzor nagiba z živosrebrnim stikalom (Mercury Tilt Switch Module, slika 88d)
Modul je sestavljen iz senzorja nagiba S s kapljico živega srebra, pull-up upora R1 in LEDice L. Glede na nagib senzorja bo kapljica živega srebra sklenila ali odprla kontakte in tako postavila izhodni priključek “S” v stanje “0” ali “1”. Če je priključek “+” spojen na 5 V, bo pri aktiviranem senzorju zasvetila LEDica L.
KY-002, senzor vibracije (Vibration Switch Module, slika 88e)
Modul je sestavljen iz senzorja vibracij (S1, SW-18010P ali sl.) in pull-up upora R1. Ko se senzor zatrese ali udari, vzmet znotraj senzorja zaniha in izmenično sklene stik in odpira kontakt: izhodni priključek “S” bo nekajkrat spremenil stanji “0” in “1”. Če se vključi pull-up upor ustreznega vhoda mikrokontrolerja, priključka “+” ni potrebno vezati na napetost napajanja.
KY-031, senzor udarca (Knock Sensor Module, slika 88f)
Modul je sestavljen iz senzorja udarca (S1) in pull-up upora R1. Ko se senzor zatrese ali udari, vzmet znotraj senzorja zaniha in izmenično sklene stik in odpira kontakt: izhodni priključek “S” bo nekajkrat spremenil stanji “0” in “1”. Če se vključi pull-up upor ustreznega vhoda mikrokontrolerja, priključka”+” ni potrebno vezati na napetost napajanja.
KY-003, senzor magnetnega polja (Hall Magnetic Sensor Module, slika 88g)
Modul je sestavljen iz senzorja magnetnega polja S (integrirano vezje A3144), pull-up upora R1 in LEDice L. Ko se postavi v magnetno polje ustrezne jakosti (občutljivost čipa je med 10 in 30 mT), bo senzor aktiviral izhodni tranzistor in s tem „potegnil” izhodni priključek “S” v stanje “0”. Hkrati bo zasvetila LEDica L. Za pravilno delovanje senzorja je priključek “+” nujno vezati na napetost napajanja 5 V.
Osnovni Bascom-AVR program za preverjanje modula z digitalnimi izhodi (37in1_prog_1.bas)
Za preverjanje delovanja modula z digitalnimi izhodi smo napisali Bascom-AVR program 37in1_prog_1.bas. Sam modul se veže na Arduino UNO ploščico glede na shemo na sliki 89. Na shemi je prikazan najenostavnejši “digitalni” modul, KY-004, s tipko in pull-up uporom. Na isti način se lahko poveže tudi kateri koli drugi modul s predhodnega spiska. Digitalni izhod modula je povezan na digitalni vhod “2” Arduina, medtem ko se “+” priključek mora povezati s “5V” priključkom Arduino ploščice samo pri uporabi modula KY-003; pri vseh ostalih modulih ta vezava ni nujna.
Kot indikator stanja se uporablja tribarvna LEDica na modulu KY-016. Uporabili bomo samo rdeči in zeleni segment, ki sta vezana na Arduino izhode “13” in “12”, medtem ko se modri segment lahko ali pa tudi ne poveže na izhod “~11”. Program 37in1_prog_1.bas preslikuje stanje vhodnega pina “2” na izhodni pin “12”, medtem ko je stanje izhodnega pina “13” vedno komplementarno stanju vhodnega pina “2”. Zaradi tega bo tribarvna LEDica svetiti rdeče, ko je pin “2” v stanju “0” (senzor je aktiviran), oziroma zeleno, ko je pin “2” v stanju “1” (senzor ni aktiviran). Program tudi pošlje sporočilo osebnem računalniku o vsaki spremembi logičnega stanja na pinu “2” preko serijskega komunikacijskega porta, oziroma preko USB priključka.
V uvodnem delu programa najprej vključimo definicije Arduino priključkov, da bi jih lahko uporabljali iz svojega programa:
$include "Arduino_pins.sub"
Nato konfiguriramo pin “2” kot vhodni, z vključenim pull-up uporom
Config Arduino_pin#2 = Input Arduino_port#2 = 1
pine “12” in “13” kot izhodne
Config Arduino_pin#12 = Output Config Arduino_pin#13 = Output Arduino_port#12 = 0 Arduino_port#13 = 0
Začetna stanja izhodnih pinov so “0”: niti ena LEDica ne sveti. Program uporablja dve bit spremenljivki, Pin#2_new in Pin#2_old. Prva od njiju vsebuje trenutno stanje vhodnega pina, druga pa stanje vhodnega pina iz predhodnega preverjanja; to nam omogoča da ugotovimo trenutek v katerem je nastala sprememba stanja in reagiramo na ustrezen način. Preverjanje delamo pogosto v glavni zanki; program najprej prebere stanje vhodnega pina “2”
Do Pin#2_new = Arduino_pin#2
in nato preverja ali se je vmes spremenilo. Če je nastala sprememba se ažurirajo stanja izhodnih pinov “12” in “13” in pošlje se ustrezna sporočila preko serijske komunikacije:
If Pin#2_new <> Pin#2_old Then Arduino_port#12 = Pin#2_new Arduino_port#13 = Not Pin#2_new Print "Input pin 2: " ; Pin#2_old ; "->" ; Pin#2_new
Končno si zapomni novo vhodno stanje in zanka se zaključuje:
Pin#2_old = Pin#2_new End If Loop
Če se ni dogodila sprememba stanja vhodnega pina, je potrebno samo malo več kot 2 µs da se izvršijo vsi ukazi znotraj Do-Loop zanke, zato bo program zmogel zaznati tudi zelo hitre oziroma kratkotrajne spremembe. Če bi se dogodila sprememba vhodnega stanja, je izvršitev zanke zmanjšana prvenstveno zaradi ukaza Print. Če uporabljamo standardno hitrost komunikacije iz 9600 Bd, bo sporočilo, ki ga pošiljamo, trajalo približno 15 ms. Če to predstavlja problem, se sporočilo lahko skrajša ali pa se lahko poveča hitrost komunikacije, npr.
$baud = 57600
Sporočila lahko sprejmemo in prikažemo s pomočjo ustreznega terminal emulatorja, tudi tega vgrajenega v Bascom-AVR. Kakor prikazuje slika 90, program na začetku pošilja osnovne informacije, kot je ime programa, konfiguracije vhodnih in izhodnih pinov in začetno stanje vhodnega pina (tega dela programa nismo analizirali), nato sledijo sporočila o spremembah stanja iz Do-Loop zanke.
Pregled modula z analognimi izhodi
Napetost izhodnih priključkov teh modulov prevzame vrednosti izmed 0 V in 5 V, vendar je to odvisno od stanja senzorja, elektronskega elementa ali vezja, ki ga modul vsebuje. Za pravilno delo modula jih je potrebno povezati na napetost napajanja 5 V (priključki 5V in GND na Arduino UNO ploščici).
KY-013, temperaturni senzor (Analog Temperature Sensor Module, slika 91a)
Modul je sestavljen iz serijsko vezanega NTC upora S1 in fiksnega upora R1. Ker je upor NTC upora temperaturno odvisen, se bo tudi napetost izhodnega priključka “S” menjala s spremembo temperature. Odvisnost izhodne napetosti od temperature ni linearna, vendar pa so poznani algoritmi za preračun napetosti v temperaturo. Za pravilno delo senzorja je “+” priključek nujno povezati na napetost napajanja 5 V.
KY-018, fotoupor (Photoresistor Module, slika 91b)
Modul je sestavljen iz serijsko vezanega fotoupora S1 in fiksnega upora R1. Ker je upornost fotoupora odvisna od intenzivnosti svetlobe s katero je osvetljen, se bo tudi napetost izhodnega priključka “S” menjala s spremembo intenzivnosti osvetljenosti. Odvisnost izhodne napetosti od intenzivnosti svetlobe ni linearna, zato je z modulom možno detektirati samo spremembe intenzitete. Za pravilno delo senzorja je “+” priključek potrebno povezati na napetost napajanja 5 V.
KY-035, aktivni magnetni senzor (Class Bihor Magnetic Sensor, slika 91c)
Na modulu se nahaja aktivni merilnik jakosti magnetne indukcije, integrirano vezje SS49E. Njegova izhodna napetost je linearno odvisna od magnetne indukcije, občutljivost čipa pa je tipično 14 V/T. Izhodna napetost je v razponu od 1 V do 4 V, kar pokriva merilno področje okoli 200 mT. Za pravilno delo senzorja je “+” priključek potrebno povezati na napetost napajanja 5 V.
KY-023, palica za igranje – joystik (Dual Axis Joystick Module, slika 91d)
Modul vsebuje dva spremenljiva upora, Rx in Ry, postavljena pod kotom 90° in stikalo S. S premikanjem krmilne palice v smeri levo-desno se pomika tudi drsnik upora Rx in spreminja napetost izhodnega priključka VRx v razponu od 0 do 5 V. S premikanjem krmilne palice v smeri gor-dol se premika drsnik upora Ry in spreminja napetost izhodnega priključka VRy v razponu od 0 do 5 V. S pritiskom na palico se sklene stikalo S. Za pravilno delo senzorja je “+” priključek potrebno povezati na napetost napajanja 5 V. Za branje stanja stikala S je potrebno aktivirati pull-up upor na ustreznem pinu mikrokontrolerja ali pač postaviti fiksni upor vrednosti okoli 10 kΩ izmed priključkov SW in +5V.
Osnovni Bascom-AVR program za preverjanje modulov z analognimi izhodi (37in1_prog_2.bas)
Za preverjanje dela modula z analognimi izhodi je napisan Bascom-AVR program 37in1_prog_2.bas. Moduli se vežejo na Arduino UNO ploščico glede na shemo na sliki 92. Na shemi je prikazan najzahtevnejši “analogni” modul, KY-023; izkoriščen je samo eden njegov analogni izhod, VRy, ki je povezan z analognim priključkom “A0”. Da bi modul pravilno deloval mu je potrebno povezati še priključke GND in +5V z istoimenskimi priključki Arduino UNO ploščice. Enostavnejši moduli iz te skupine se vežejo po istem principu.
Kot indikator stanja se uporablja tribarvna LEDica na modulu KY-016. Program 37in1_prog_2.bas uporablja samo modri segment te diode, vezan na Arduino izhod “~11”; rdeči in zeleni segmenti nimajo funkcije. Program meri napetost vhodnega pina “A0” in proporcionalno tej napetosti postavlja intenzivnost svetilnosti modrega segmenta LEDice: LEDica sveti bolj intenzivno če je vhodna napetost višja. Če je vhodna napetost 0 V, je LEDica je ugasnjena, če je vhodna napetost 5 V, LEDica sveti s polno svetilnostjo. Program tudi pošlje sporočilo osebnemu računalniku o vsaki spremembi napetosti na pinu “A0” preko serijskega komunikacijskega porta, oziroma preko USB priključka.
V uvodnem delu programa najprej vključimo definicije Arduino priključkov, da bi jih lahko uporabili iz svojega programa:
$include "Arduino_pins.sub"
in nato na ustrezen način konfiguriramo analogno-digitalni pretvornik
Config Adc = Single, Prescaler = Auto, Reference = Avcc
in Timer2:
Config Timer2 = Pwm , Prescale = 64 , Compare_a_pwm = Clear_up Compare2a = 0
Timer2 se uporablja za generiranje impulzov frekvence okoli 500 Hz na izhodnem priključku “~11”. Trajanje impulza je določeno s trenutno vsebino registra Compare2a (znotraj razpona od 0-255) po principu: če je vpisana številka večja, bodo impulzi širši. Compare2a = 0 postavlja izhodni pin “~11” trajno v stanje “0”, Compare2a = 255 pa postavlja izhodni pin trajno v stanje “1”. Tako z menjanjem v register vpisane vrednosti Compare2a krmilimo intenzivnost svetilnosti modre LEDice iz modula KY-016.
Program uporablja dve Word spremenljivki, Adc_value in Adc_value_old. Prva izmed njih vsebuje trenutno vrednost A/D pretvornika, druga vrednost pa iz predhodne konverzije; to nam omogoča, da ugotovimo trenutek, v katerem je nastala sprememba vhodne napetosti in delujemo na ustrezen način. Branje vhodne napetosti delamo v glavni zanki 10-krat v sekundi. Program najprej meri napetost vhodnega pina “A0”
Do Adc_value = Getadc(0
in nato preverja ali se je medtem spremenil. Če je nastala sprememba, se pošlje ustrezno sporočilo preko serijske komunikacije in zapomni se nova vrednost:
If Adc_value <> Adc_value_old Then Print "Analog pin 0: " ; Adc_value Adc_value_old = Adc_value End If
Nato se nova vrednost iz A/D pretvornika deli s 4, da bi jo lahko vpisati v Compare2a register (to je potrebno, ker je A/D pretvornik 10-bitni, Compare2a register pa je 8-bitni):
Shift Adc_value , Right , 2 Compare2a = Adc_value
S tem smo širino impulza na izhodu “~11” prilagodili vhodni napetosti. Končno, pogostost A/D konverzije zmanjšujemo na 10 v sekundi in zapiramo zanko:
Waitms 100 Loop
Sporočila, ki jih pošilja program 37in1_prog_2.bas lahko sprejmemo in prikažemo s pomočjo ustreznega terminal emulatorja (slika 93). V prvi skupini so osnovne informacije, kot ime programa in konfiguracije vhodnega in izhodnega pina, nato sledijo branja iz A/D pretvornika. Prikazane vrednosti so v razponu 0-1023 in so odvisne od trenutne vrednosti napetosti na vhodnem pinu “A0”, vendar ne predstavljajo neposredno vrednost prebrane napetosti niti vrednost fizikalne veličine, ki jo meri senzor – obdelavi podatka iz A/D pretvornika se bomo posvetiti ob drugi priložnosti.
Opomba: datoteko Arduino_pins.sub z definicijami Arduino UNO pinov ter programe 37in1_prog_1.bas in 37in1_prog_2.bas lahko brezplačno dobite v uredništvu revije.
https://svet-el.si
Barduino-18