Izobraževanje‎ > ‎

Mobilni robot - TD


Predno začnete, prosim rešite tale vprašalnik:  Tehniški dan

Sestavimo robota

Sestavili bomo robota, ki bo vozil po črti, lahko bo zaznaval ovire pred seboj in se jim izogibal. Animacija prikazuje, kako lahko sestavite takega robota, tole [datoteko] pa lahko odprete v programu Google Sketchup, kjer boste 3D model tega mobilnega robota in navodila za sestavljanje. 






01. Moj prvi program

Kako namestiti programsko opremo si lahko preberete tule [Namestitev programske opreme]. Nato pa lahko nadaljujemo... naprimer, če želimo vključiti digitalni izhod, s katerim želimo poganjati motorčke ali druge naprave, moramo v programskem okolju BASCOM sestaviti naslednji program.

$regfile = "m16def.dat"
$crystal = 8000000
Config Portc = Output
Portc.= 1
End

Ugotovite, kaj se zgodi, če namesto Portc.= 1 napišete Portc.= 0 ?
Ugotovite, kaj se zgodi, če namesto tega ukaza napišete Portc.= 1 ?

02. Prvi utrip LED diode

Zgornji program preoblikujte tako, da bo LED dioda utripnila za 1 sekundo... 
 Izvajanje programa je preprosto:
  1. Najprej moramo "lučko" vključiti,
  2. nato počakati 1 sekundo in
  3. za tem "lučko" izključiti.
$regfile = "m16def.dat"
$crystal = 8000000
Config Portc = Output

Portc.= 1
Wait 1
Portc.= 0

End

Preizkusi kaj se zgodi, če namesto Wait 1 napišeš ukaz Wait 3 ?
Kaj pa se zgodi, če namesto tega ukaza napišeš Waitms 500 ali če na to mesto vpišemo  Waitms 5000 ?



























Kot si lahko opazil, je lučka zasvetila za nekaj časa in nato ugasnila. Če izključiš napajanje in ga ponovno vključiš, se bo vsa stvar ponovila.




03. Priključimo motor

S tem signalom lahko krmilimo tudi druge naprave, kot naprimer pogonski motor robota. 
Priključimo LEVI MOTOR na C0 in C1 ...
in preizkusi isti program še enkrat ... KAJ UGOTOVIŠ?


Če je potrebno zamenjaj priključke motorja tako, da se bo robotek premikal naprej v desno kot prikazuje desna slika.

Ko ti je uspelo robota premakniti tako, kot kaže slika preizkusi naslednji program:
$regfile = "m16def.dat"
$crystal = 8000000
Config Portc = Output

Portc.= 0
Portc.= 1
Wait 2
Portc = 0

End

Ker ima motor 2 žici, je bolj pravilno, da krmilimo napetost na obeh priključkih motorja, saj tako lahko krmilimo smer toka skozi motor.  Ugotovite, kako se premika robot (levo pogonsko kolo) za vse 4 možne kombinacije obeh priključkov:

   Programski ukazi Smer levega pogonskega motorja 
 1.Portc.= 0
Portc.= 0

 
 2.Portc.= 1
Portc.= 0

 
 3.Portc.= 0
Portc.= 1

 
 4.Portc.= 1
Portc.= 1

 

04. Priključimo še desni pogonski motor

Sedaj lahko priključimo še desni pogonski motor.
DESNI POGONSKI MOTOR priključimo na C2 in C3 ...
... preizkusi spodnji program in po potrebi uredi priključke motorja tako, da se bo robotek premaknil levo naprej kot prikazuje slika.

$regfile = "m16def.dat"
$crystal = 8000000
Config Portc = Output
'desni pogonski motor premakne robotka LEVO NAPREJ !
Portc.= 0
Portc.= 1
Wait 2
Portc = 0
End



05. Vožnja naprej

Tako, sedaj smo nared, da naš robotek lahko pelje naravnost za nekaj sekund. Preizkusite spodnji program in preverite, ali robotek res pelje naravnost naprej.
 
$regfile = "m16def.dat"
$crystal = 8000000
Config Portc = Output
'levo kolo NAPREJ
Portc.= 0
Portc.= 1
'desno kolo NAPREJ
Portc.= 0
Portc.= 1
Wait 2
'desno in levo kolo STOP
Portc = 0


End

Raziščimo možnosti vožnje

Prejšnji program preoblikujte tako, da se bo lahko robotek gibal v različne smeri. V spodnjo tabelo napiši ukaze, ki jih mora krmilnik izvesti, da se bo robot gibal v smereh, ki jih prikazujejo spodnje slike:

 Gibanje robota Programski ukazi za oba motorja
 naprej

'levo kolo NAPREJ
Portc.= 0
Portc.= 1
'desno kolo NAPREJ
Portc.= 0
Portc.= 1
 
 nazaj
 
 levo naprej 
 desno naprej  
obrat na mestu v levo  
 obrat na mesti v desno 



06. Počakaj na klik!

Kot ste lahko opazili se je robotek odzval takoj, ko ste nanj presneli program ali pa ko ste vmesnik ponovno priključili na napajanje.  Kaj ko bi se program začel izvajati šele takrat, ko bomo pritisnili na tipko B0
Preizkusite naslednji program:

$regfile = "m16def.dat"
$crystal = 8000000

Config Portc = Output
Config Portb = Input

Do
Loop Until Pinb.= 1

   Portc.= 1
   Portc.= 0
   Portc.= 0
   Portc.= 1
Wait 2
   Portc.= 0
   Portc.= 1
   Portc.= 1
   Portc.= 0
Wait 3
   Portc.= 1
   Portc.= 0
   Portc.= 1
   Portc.= 0
Wait 2
   Portc.= 0
   Portc.= 1
   Portc.= 0
   Portc.= 1
Wait 2
   Portc = 0
End


Ponovno izvajanje programa

Še vedno se program izvede le enkrat in nato moramo vmesnik ponovno izključiti in vključiti, če želimo, da se program izvede ponovno ... Vendar si lahko pomagamo z Do-Loop zanko in program se bo izvajal ponovno, ponovno, ponovno, ponovno,... vsakič, ko bomo pritisnili tipko.

KAKO?


Naj robot zapleše

Sestavite tako zaporedje ukazov, da bo vaš robot zaplesal... Naj gre nekaj sekund naprej... pomiga levo, desno, se premakne nazaj ...

... uporabite domišljijo ...


07. Vožnja po črti

Sedaj, ko naš robotek že lepo miga, ga naučimo še kako naj sledi črti. Najprej moramo priključiti lučko in svetlobni senzor. 

Priključimo lučko

LUČKO priključimo na C4 in GND ...

Lučko bomo potrebovali zato, da bo naš robotek manj odvisen od okoliške svetlobe. Tako bo lahko sam osvetljeval tla pod sabo in zato bolje ločil temno in svetlo podlago.

Priključimo svetlobni senzor

Naredili bomo še svetlobni senzor, kjer bomo uporabili forotranzistor in upor, ki sta vezana zaporedno v delilnik napetosti.
Svetlobni senzor (rumena kocka s črnim pokrovčkom) eno žico vežemo na +5V (rdeče označen priključek, katerega se vidi, če snamete pokrovček) in drugo žico na A0.
Nato dodamo še upor velikosti cca. 470 kOhmov med A0 in GND.

Program za vožnjo robota po črti

Pravzaprav bo robot vozil po robu črte. Program bomo napisali takole:
  1. Če je robot na črni površini naj zavije LEVO NAPREJ
  2. Če pa je robot na beli površini, pa naj zavije DESNO NAPREJ 
Tako bo naš robot "racal" po robu črte... Preizkusite tale program:

$regfile = "m16def.dat"
$crystal = 8000000

Config Porta = Input
Config Portb = Input
Config Portc = Output
Config Portd = Input

Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc

Do
Loop Until Pinb.= 1

Dim Svetloba As Word

   Portc = 0
   Portc.= 1

Do
  Svetloba = Getadc(0)
  If Svetloba < 800 Then
      'LEVO naprej, samo DESNO pogonjsko kolo se vrti
      Portc.= 0
      Portc.= 0
      Portc.= 0
      Portc.= 1
  Else
      'DESNO naprej, samo LEVO pogonjsko kolo se vrti
      Portc.= 0
      Portc.= 1
      Portc.= 0
      Portc.= 0
  End If
  Waitms 50
Loop

End



08. Zaznavanje ovir

V nadaljevanju bomo opremili robota tako, da bo lahko zaznaval ovire pred seboj. Že na začetku smo mu namestili nek odbijač, ki bo ob, stiku s predmetom, sklenil tipko. Tako bo lahko robot zaznal, da ima pred seboj nek predmet in se bo lahko ustavil.

Priključitev tipke

Tipka ima tri priključke (označeni so z 1 , 2 in 3), ki jih na vmesnik priključimo takole:
  1. priključek  moramo priključiti na A1,
  2. priključek pričvrstimo na +5V
  3. priključek povežemo na GND.

Program za dotik z oviro

Sedaj lahko napišemo tak program, ki bo pognal robotka naravnost naprej in ko se bo ta dotaknil ovire, naj se malo odmakne nazaj in ustavi.
Preizkusite naslednji program:

$regfile = "m16def.dat"
$crystal = 8000000                                    

Config Portc = Output
Config Porta = Input
Config Portb = Input

Do
Do
Loop Until Pinb.= 1

Do
'naprej
   
Portc.= 0
   Portc.= 1
   Portc.= 0
   Portc.= 1
Loop Until Pina.1 = 0

'nazaj
  
 Portc.= 1
   Portc.= 0
   Portc.= 1
   Portc.= 0
  
Wait 1
'stop
   Portc = 0
  
Loop

End


Dopolnite program tako, da bo robotek obšel oviro.


09. IR senzor razdalje

Precej nerodno bi bilo, če bi morali avtomobili zaznavati predmete le z dotikom... Zato je bolje, če lahko predmete v okolici zaznavamo brezkontaktno, naprimer z infra-rdečim senzorjem razdalje.


Namestite IR senzor razdalje na sprednji del robota in ga priključite na 3-pinski priključek A4



Preizkusite naslednji program in, ko ga naložite v robotka, se z roko približajte IR senzorju ter opazujte LED na ploščici:

$regfile = "m16def.dat"
$crystal = 8000000

Config Porta = Input
Config Portb = Input
Config Portc = Output
Config Portd = Input

Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc

Dim Svetloba As Word

Do
Loop Until Pinb.= 1

Do
  Svetloba = Getadc(4)
  Select Case Svetloba
  Case Is < 100 : Portc = &B0001_0000
  Case Is < 250 : Portc = &B0011_0000
  Case Is < 400 : Portc = &B0111_0000
  Case Is < 550 : Portc = &B1111_0000
  End Select

  Waitms 5
Loop

End


10. Zaznavanje ovir z IR senzorjem

Preizkusite naslednji program, kjer bo robot zaznal oviro še preden se zaleti v njo:

$regfile = "m16def.dat"
$crystal = 8000000                                   

Config Portc = Output
Config Porta = Input
Config Portb = Input

Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc

Do
Loop Until Pinb.= 1

Do

Portc.= 0                    'naprej
Portc.= 1
Portc.= 0
Portc.= 1

Loop Until Getadc(4) > 400

Portc.= 1                      'nazaj
Portc.= 0
Portc.= 1
Portc.= 0 
                                           
Wait 1

Portc = 0

End

11. Robot Sledilec 

Preizkusite naslednji program kjer bo robot vzdrževal razdaljo do ovire. Probajte premikat oviro (roko) bližje in dlje:

$regfile = "m16def.dat"
$crystal = 8000000

Config Porta = Input
Config Portb = Input
Config Portc = Output
Config Portd = Input

Config Adc = Single , Prescaler = Auto , Reference = Off
Start Adc

Dim Svetloba As Word

Do
Loop Until Pinb.= 1

Do
  Svetloba = Getadc(4)
  If Svetloba < 300 Then
      Portc.= 0
      Portc.= 1
      Portc.= 0
      Portc.= 1
  Else
      Portc.= 1
      Portc.= 0
      Portc.= 1
      Portc.= 0
  End If
  Waitms 5
Loop
End



12. Servo levo desno

Za obračanje IR senzorja bomo v našem končnem programu uporabili servo motor. To je posebne vrste motor, ki se ne vrti kot navaden ampak se postavi v določeni položaj in ostane v njem, dokler ne dobi novega ukaza. Zaradi te lastnosti je uporaben za upravljanje raznih igrač in tudi resnejših strojev (npr. za obračanje koles levo, desno,... obračanje zakrilc aviona,...). 

Poveži žičke servo motorja na 3 pinski priključek D0. 


Preizkusi naslednji program in pritiskaj tipko B1 za levo in B2 za desno:

$regfile = "m16def.dat"
$crystal = 8000000

Config Porta = Input
Config Portb = Input
Config Portc = Output
Config Portd = Output

Config Servos = 1 , Servo1 = Portd., Reload = 10
Servo(1) = 60
Enable Interrupts

Do
   If Pinb.= 1 Then Servo(1) = Servo(1) + 5
   If Pinb.= 1 Then Servo(1) = Servo(1) - 5

   If Servo(1) > 130 Then Servo(1) = 130
   If Servo(1) < 30 Then Servo(1) = 30
   Waitms 20
Loop


End

13. Vožnja po črti in izogib oviram

Preden naložite zadnji program, bo potrebno pritrditi servo motor na našega robota. Kako ga namestite prikazuje spodnji video. Nanj bomo namestili IR senzor s katerim bo naš robot opazoval morebitne ovire pred seboj, medtem ko bo vozil po črti. 


Hvala za poslušnost in prosimo vas, da izpolnite tale vprašalnik : Tehniški dan II