Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

Kratek vodič

za programiranje
rezine RobDuino v
okolju BASCOM
Tomaž Kušar
Kratek opis uporabe rezine RobDuino
Zbral in zapisal Tomaž Kušar

Rezino RobDuino je razvil in izdelal David Rihtaršič. Programsko knjižnico robDuino.bas je razvil Tomaž Kušar

Sheme so narisane s programom Fritzing.

Nazadnje posodobljeno:
februar, 2019, različica 1.0
Kazalo vsebine
1 Digitalni izhod...................................................................................................................................................................4
1.1 Vezava porabnika na digitalni izhod.........................................................................................................................4
1.2 Krmiljenje digitalnih izhodov...................................................................................................................................4
2 Digitalni izhod s funkcijo motor[1-3]................................................................................................................................6
2.1 Vezava motorja..........................................................................................................................................................6
2.2 Klicanje funkcije motor[1-3]....................................................................................................................................6
2.3 Uporaba funkcije motor in pulznoširinsko krmiljenje motorjev...............................................................................6
3 Digitalni vhod....................................................................................................................................................................7
3.1 Vezava digitalnega senzorja na vhod........................................................................................................................7
3.2 Konfiguracija digitalnega vhoda...............................................................................................................................7
3.3 Branje digitalnega vhoda oziroma stanja tipke.........................................................................................................8
4 Analogni vhod....................................................................................................................................................................9
4.1 Vezava analognega senzorja......................................................................................................................................9
4.2 Konfiguracija analognega vhoda..............................................................................................................................9
4.3 Branje analognega vhoda..........................................................................................................................................9
5 Izpis na LCD....................................................................................................................................................................10
5.1 Vezava LCD-ja........................................................................................................................................................10
5.2 Konfiguracija LCD-ja.............................................................................................................................................10
5.3 Izpisovanje na LCD................................................................................................................................................10
6 Ultrazvočni senzor razdalje.............................................................................................................................................11
6.1 Vezava senzorja HC-SR04......................................................................................................................................11
6.2 Konfiguracija senzorja HC-SR04...........................................................................................................................11
6.3 Branje senzorja........................................................................................................................................................11
7 Servo motor.....................................................................................................................................................................12
7.1 Vezava servomotorjev.............................................................................................................................................12
7.2 Konfiguracija servomotorjev..................................................................................................................................12
7.3 Krmiljenje servomotorjev.......................................................................................................................................12
8 Programske strukture.......................................................................................................................................................13
8.1 setup().....................................................................................................................................................................13
8.2 Loop().....................................................................................................................................................................13
8.3 Funkcije...................................................................................................................................................................13
8.4 If strukture...............................................................................................................................................................13
8.5 Zanka while.............................................................................................................................................................13
8.6 Matematični operatorji............................................................................................................................................14
8.7 Primerjani operatorji...............................................................................................................................................14
8.8 Logični operatorji....................................................................................................................................................14
9 Objekti in spremenljivke..................................................................................................................................................14
10 Časovnik (timer)............................................................................................................................................................15
10.1 Konfiguracija časovnika.......................................................................................................................................15
10.2 Uporaba časovnika oziroma objekta Timer..........................................................................................................15
1 Digitalni izhod
Z digitalnimi izhodi krmilimo aktuatorje oziroma
porabnike. Močnostni digitalni izhodi so na rezini
RobDuino označeni s črko D (PortD, od D0 – D7). Ko v
program vključimo knjižnico RobDuino.bas, je
PortD nastavljen kot izhodni priključek. PortD sicer v
kombinaciji z rezino RobDuino lahko uporabljamo tudi
kot VHODNI priključek, a zelo redko.

Če PORTD uporabljamo kot vhod, potem uporabljamo


črne sponke in NE modrih vijačnih sponk.

1.1 Vezava porabnika na digitalni izhod


Lučke, svetleče diode in podobne porabnike običajno
vežemo na potencial 0 V (GND) in na enega od izhodov
D, razen če želimo da porabnik sveti neprestano – v tem
primeru ga lahko vežemo direktno na potencial +5V.

Enosmerne motorje (DC motorje) vežemo med dva


priključka D. Več o motorjih v naslednjem poglavju.

1.2 Krmiljenje digitalnih izhodov


Slika 1: Vezava lučke.
Za določanje izhodnega stanja na izhodih D imamo na
voljo tri ukaze.

1. V desetiški obliki:
PORTD = 20
PORTD = 0

2. V dvojiški obliki:
PORTD = &B10100111

3. BASCOM ukaz:
PORTD.4 = 1
PORTD.0 = 0

Slika 2: Vezava enosmernega motorja.

Primer kode, krmiljenja izhodnega priključka D7 in sicer gre za utripanje lučke na izhodu D7 s frekvenco 1Hz.

$regfile = "m328pdef.dat"
$crystal = 16000000
$include "RobDuino.bas"
Config Portd = Output
Do
Portd.7 = Not Portd.7
Waitms 500
Loop
End
2 Digitalni izhod s funkcijo motor[1-3]
Za krmiljenje motorjev je v knjižnici RobDuino.bas
zapisana posebna funkcija motor. Z njo enostavno
krmilimo smer in hitrost vrtenja motorja.

2.1 Vezava motorja


Motorje moramo v primeru uporabe funkcije motor
obvezno priključiti na dva sosednja priključka D, na
primer na D7 in D6, ali D5 in D4 ali D3 in D2.

OPOMBA: Funkcija ne deluje na priključkih D0 in D1,


lahko pa na teh priključkih krmilimo motor brez
omenjene funkcije, torej na enak način kot je zapisano v
poglavju 1 - Krmiljenje digitalnih izhodov.

2.2 Klicanje funkcije motor[1-3]


Takoj na začetku programa, kjer vključimo
konfiguracijsko datoteko RobDuino.bas moramo
zapisati naslednje vrstice:
$include "RobDuino.bas"

Funkcijo kličemo na naslednji način


S prvim parametrom določimo smer vrtenja
(naprej, nazaj ali ustavi, lahko pa tudi
levo, desno).
Z drugim parametrom nastavljamo hitrost
Motor2 Naprej , 200 (moč) motorja od 0 do 255, kar je maksimalna
Motor2 Nazaj , 255 vrednost. Pri tej vrednosti se bo motor vrtel s
polno hitrostjo.
Motor2 Ustavi , 200
OPOMBA: Noben parameter ne sme biti
prazen. Če prvi parameter nastavimo na
Ustavi, je drugi parameter lahko katerakoli
številka, ne smemo pa pustiti prazno.

2.3 Uporaba funkcije motor in pulznoširinsko krmiljenje motorjev


V programu funkcijo pokličemo tako:
Najprej smo motor vklopili, da se 0,5s vrti
Motor2 Naprej , 200 naprej, potem pa smo ga izklopili.
Waitms 500
Motor2 Ustavi , 200

Kot je zapisano že zgoraj, z drugim parametrom


nastavljamo moč motorja in sicer od 0 do 255. Pri zelo
nizkih vrednostih (pod 100), se motor najbrž ne bo
vrtel. Motorju bi v tem primeru dovajali premalo
električne moči, da bi z njo premagali vse izgube
(trenje, izkoristek motorja), ki se pojavljajo pri
obratovanju motorja.
PRIMER:

Do
Gosub Pelji_naprej
Wait 2
Gosub Pelji_nazaj
Wait 2
Loop

End

Pelji_naprej:
Motor3 Naprej , 128
Wait 2
Motor3 Ustavi , 255
Wait 1
Return

Pelji_nazaj:
Motor3 Nazaj , 200
Wait 2
Motor3 Ustavi , 255
Wait 1
Return
3 Digitalni vhod
Z digitalnimi vhodi zaznavamo stanje tipk, stikal in
digitalnih senzorjev. Digitalni vhodi so lahko vsi
priključki PortaB ali PortaC.

3.1 Vezava digitalnega senzorja na vhod


Na rezini RobDuino sta že dve tipki, katerih stanji
beremo na digitalnih vhodih. To sta tipki C4 in C5, ki
sta vezani na vhod C4 oz. C5 tako, da s pritiskom na
posamezno tipko, na vhodih C4 oz. C5 povzročimo
logično 0, oziroma napetostni potencial 0V (rečemo
GND). Ko tipka ni stisnjena, pa naj bi bil na vhodu
napetostni potencial +5V. Slednjega zagotovimo z
vezavo upora proti napajanju (angl. PULL-UP). To
pomeni, da je digitalni vhod privzeto v stanju logične 1.
Za omenjeno vezavo uporov proti napajanju poskrbimo
s konfiguracijo tipk v datoteki RobDuino.bas.

Če na rezino RobDuino vežemo še dodatna stikala in


tipke, je najenostavneje, da jih povežemo in
konfiguriramo enako, kot tipki C4 in C5, torej s PULL-
UP vezavo. To pomeni, da bomo s pritiskom tipke na
vhodu povzročili napetostni potencial 0V, sicer pa bomo
na vhodu imeli napetostni potencial +5V. Za takšno
vezavo potrebujemo samo dve žici (slika desno).

RobDuino je zasnovan tako, da je pri vezavi potrebnih


čim manj žic, vseeno pa toliko, da se lahko obravnava
tokokroge oziroma vezave.

3.2 Konfiguracija digitalnega vhoda


Najenostavnejša uporaba oziroma konfiguracija
digitalnega vhoda je torej z uporabo datoteke
RobDuino.bas. Za vsak vhod C posebej omogočimo
PULL-UP vezavo in sicer v datoteki RobDuino.bas,
tako da postavimo vrednost spremenljivke
Button_cx_enabled na 1, pri čemer je x zaporedna
številka vhoda.
Const Button_c5_enabled = 1
Const Button_c4_enabled = 1
Const Button_c3_enabled = 1
Const Button_c2_enabled = 1
Const Button_c1_enabled = 1
Const Button_c0_enabled = 1

.
3.3 Branje digitalnega vhoda oziroma stanja tipke
Digitalni vhod lahko beremo na več načinov. Če
uporabljamo zgornjo konfiguracijo, je branje stanja
tipke naslednje:

Paramater dol pomeni da tipko sklenemo,


If C4 = dol Then Goto Main gor pomeni, da tipka ni sklenjena.
Če torej želimo prebrati vrednost na vhodu C2 in vrednost
shraniti v spremenljivki stanje, zapišemo naslednji ukaz:

Dim Stanje As Bit Primer kaže, kako preberemo stanje tipke C2


Stanje = C2 in ga shranimo v spremenljivko stanje.
If stanje = dol Then Goto Main Potem pa vrednost spremenljivke stanje
uporabimo v odvisnem stavku.

PRIMER:

Do
If C4 = Dol Then Gosub Vklopi_ventilator
If C5 = Dol Then Gosub Izklopi_ventilator
Loop

End

Vklopi_ventilator:
Motor2 Naprej , 255
Return

Izklopi_ventilator:
Motor2 Ustavi , 255
Return
4 Analogni vhod
Z analognimi vhodi zaznavamo stanje analognih
senzorjev, kot na primer, svetlobni senzor, temperaturni
senzor...

Analogni vhodi na rezini RobDuino so lahko vsi


priključki C (PortC) na vijačnih sponkah.

4.1 Vezava analognega senzorja


Analogne senzorje priključimo torej na vhode C. Desno
je slika vezave svetlobnega senzorja, ki ga imamo v
zbirki fischertechnik.

4.2 Konfiguracija analognega vhoda


Če uporabimo datoteko RobDuino.bas, potem se s
konfiguracijo analognega vhoda ni potrebno ukvarjati.
Dovolj je, da znamo poklicati funkcijo, ki prebere
vrednost na določenem vhodu. Spremenljivka ki hrani
vrednost analognega vhoda naj bo tipa word.

Dim Vrednost As Word


Vrednost = Getadc(2)

4.3 Branje analognega vhoda

PRIMER:

Do
Print Getadc(2)
Waitms 300
Loop

End
5 Izpis na LCD
Na rezino RobDuino lahko priključimo tudi LCD. Za ta
namen ima rezina poseben 10 pinski speedy konektor
(označen na sliki).

5.1 Vezava LCD-ja


Če sami z žicami ali ploščatim kablom povezujemo
LCD, moramo paziti na priključka GND in +5V. Vse
priključke pa seveda vežemo po shemi. V kolikor
imamo LCD, ki je v kompletu RobDuino, se z vezavo
ne ukvarjamo.

5.2 Konfiguracija LCD-ja


Da lahko delamo z LCD-jem, ga moramo v datoteki
RobDuino.bas omogočiti in sicer konstanto
Lcd_enabled postavimo na vrednost 1.

Const Lcd_enabled = 1

5.3 Izpisovanje na LCD


Izpisovanje na LCD je enostavno. Poznati moramo vsaj
naslednje 3 ukaze.

Do Z ukazom cls počistimo vse kar je trenutno


Cls izpisano na LCD-ju.
Lcd "C4=" ; C4
Locate 2 , 1
Lcd "C5=" ; C5
Waitms 100 Ukaz Lcd uporabljamo za izpis na zaslon.
Izpisujemo lahko besedilo ali pa vrednost
Loop
spremenljivk. Besedilo postavimo v dvojne
narekovaje, spremenljivko pa izpišemo
direktno. Če združujemo več napisov, vmes
zapišemo podpičje (;).

Ukaz Locate uporabljamo za premikanje po


zaslonu. Prvi parameter nam določa vrstico,
drugi pa pozicijo (zaporedni znak) v vrstici.

Pri uporabi LCD-ja moramo vedno paziti, da


med posameznim izpisom in izbrisom
naredimo časovni zamik, sicer na LCD-ju ne
zaznamo izpisa. Tudi LCD- ne more tako zelo
hitro izpisovati.
6 Ultrazvočni senzor razdalje
Na rezino RobDuino lahko priključimo tudi ultrazvočni
senzor. V nadaljevanju je opisan način uporabe senzorja
HC-SR04.

6.1 Vezava senzorja HC-SR04.


Priključka GND in Vcc povežemo s priključkoma GND
oziroma +5V na rezini RobDuino. Za priključka Trig in
Echo pa imamo več možnosti. V datoteki RobDuino.bas
je privzeto nastavljeno, da priključka Trig in Echo
vežemo na naslednja dva priključka:

Trig.......….......... C3
Echo..... ….......... C2

6.2 Konfiguracija senzorja HC-SR04


Da lahko uporabljamo ulstrazvočnio senzor razdalje, da
moramo omogočiti v datoteki RobDuino.bas. Vse kar
moramo storiti je, da konstanto Enhcsr04 nastavimo
na vrednost 1.
Const Enhcsr04 = 1

6.3 Branje senzorja


Za odčitavanje vrednosti senzorja uporabljamo funkcijo
Izmeriuz_mm()

Funkcija nam vrne razdaljo do najbližjega objekta v mm

OPOMBA! Senzor ne deluje, če je razdalja manjša kot


40mm in večja kot 2000mm. Senzor v tem primeru ne
dela pravilno oziroma vrne napako.

PRIMER:

Dim Razdalja As Word


Do
If C4 = Dol Then Gosub Do_ovire
Loop
End
Do_ovire:
Motor1 Naprej , 255
Razdalja = Izmeriuz_mm()
While Mm > 50
Razdalja = Izmeriuz_mm()
Wend
Motor1 Ustavi , 255
Return
7 Servo motor
Na RobDuino lahko priključimo standardni servo motor,
oziroma 3 servomotorje.

7.1 Vezava servomotorjev


Servmotorje povežemo na tripinske konektorje, kjer
lahko preberemo oznako PWM, na sredini vmesnika.

7.2 Konfiguracija servomotorjev


Datoteka RobDuino.bas že vsebuje vse
konfiguracijske nastavitve, tako da se z nastavitvijo ni
potrebno ukvarjati.

7.3 Krmiljenje servomotorjev


Za krmiljenje servomotorjev potrebujemo samo en
ukaz, s katerim postavimo motor v določeno pozicijo.
Vrednost parametra v oklepaju pomeni orientacijo S parametrom določimo orientacijo
motorja v kotnih °. motorja, od 0° do 180°.

Servo1 30

PRIMER:

Dim I As Byte
Do

For I = 30 To 120
Servo1 I
Waitms 100
Next I
Wait 2

For I = 120 To 30 Step -1


Servo1 I
Waitms 100
Next I
Wait 2

Loop
End
8 Programske strukture
Pri programiranju neizbežno uporabljamo programske strukture kot so zanke in odločitveni (pogojni) stavki. V
nadaljevanju je opisanih nekaj struktur.

8.1 Zanka Do-Loop


To je neskončna zanka. Vse kar je zapisano v tej zanki, se izvaja neskončno dolgo.

8.2 If strukture
Z if strukturo preverjamo, če je določen pogoj izpolnjen in potem posledično ukrepamo.
If pogoj_izpolnjen then

Če pogoj ne bo nikoli izpolnjen, se ne bo zgodilo nič. Če pa vseeno želimo, da se kljub neizpolnjenemu pogoju nekaj
zgodi, uporabimo if-else strukturo.

If pogoj_ipolnjen then
nekaj_naredi...
Else
naredi_nekaj_drugega...
End if

8.3 Zanka while-wend


Zanka while se izvaja, dokler je pogoj zapisan v oklepaju izpolnjen. V spodnjem primeru čakamo na mestu, dokler
nekdo ne stisne tipke C4.
While C4 = gor
Wend

8.4 Matematični operatorji


Matematične operatorje uporabljamo pri računanju.

x = x + 1 , x povečamo za 1
x = x – 1, x zmanjšamo za 1
x = x + y, x-u prištejemo y
x = x-y, x-u odštejemo y
x = x*y, x pomnožimo z y
x = x/y, x delimo z y

8.5 Primerjani operatorji


Primerjalne operatorje uporabljamo v if strukturah, ko preverjamo pogoje.

x=y x je enako y
x != y x ni enak y
x<y x je manjše od y
x>y x je večji od y
x <= y x je manjšji ali enak y
x >= y x je večji ali enak y
8.6 Logični operatorji
Logične operatorje uporabljamo pri združevanju oziroma preverjanju dveh pogojev.

Logični AND:

if C4 = dol And C5 = dol pogoje je izpolnjen, ko stisnemo obe tipki.

Logični OR:

if C4 = dol Or C5 = dol pogoj je izpolnjen, ko je vsaj ena od tipk stisnjena

9 Spremenljivke
Držimo se enotne dogovorjene oblike in pri programiranju imena spremenljivk pišimo z malo začetnico. V kolikor so
imena spremenljivk sestavljena iz večih besed, se naslednja beseda začne z veliko začetnico.

PRIMER kreiranja spremenljivke:


dim vrednostAdc As Word, Dim vrednostADC As Word

You might also like