Predno začnete, prosim rešite tale vprašalnik: Tehniški dan
Vsebina
| Sestavimo robotaSestavili 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 programKako 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.7 = 1 End Ugotovite, kaj se zgodi, če namesto Portc.7 = 1 napišete Portc.7 = 0 ? Ugotovite, kaj se zgodi, če namesto tega ukaza napišete Portc.4 = 1 ? 02. Prvi utrip LED diodeZgornji program preoblikujte tako, da bo LED dioda utripnila za 1 sekundo...
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 motorS 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Š? Ko ti je uspelo robota premakniti tako, kot kaže slika preizkusi naslednji program: $regfile = "m16def.dat" $crystal = 8000000 Config Portc = Output Portc.0 = 0 Portc.1 = 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:
04. Priključimo še desni pogonski motorSedaj 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.2 = 0 Portc.3 = 1 Wait 2 Portc = 0 End 05. Vožnja naprejTako, 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 = 0 Portc.1 = 1 'desno kolo NAPREJ Portc.2 = 0 Portc.3 = 1 Wait 2 'desno in levo kolo STOP Portc = 0 End Raziščimo možnosti vožnjePrejš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:
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.0 = 1 Portc.0 = 1 Portc.1 = 0 Portc.2 = 0 Portc.3 = 1 Wait 2 Portc.0 = 0 Portc.1 = 1 Portc.2 = 1 Portc.3 = 0 Wait 3 Portc.0 = 1 Portc.1 = 0 Portc.2 = 1 Portc.3 = 0 Wait 2 Portc.0 = 0 Portc.1 = 1 Portc.2 = 0 Portc.3 = 1 Wait 2 Portc = 0
End Š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? Sestavite tako zaporedje ukazov, da bo vaš robot zaplesal... Naj gre nekaj sekund naprej... pomiga levo, desno, se premakne nazaj ... ... uporabite domišljijo ...
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čkoLUČ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 senzorNaredili 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 črtiPravzaprav bo robot vozil po robu črte. Program bomo napisali takole:
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.0 = 1 Dim Svetloba As Word Portc = 0 Portc.4 = 1 Do Svetloba = Getadc(0) If Svetloba < 800 Then 'LEVO naprej, samo DESNO pogonjsko kolo se vrti Portc.0 = 0 Portc.1 = 0 Portc.2 = 0 Portc.3 = 1 Else 'DESNO naprej, samo LEVO pogonjsko kolo se vrti Portc.0 = 0 Portc.1 = 1 Portc.2 = 0 Portc.3 = 0 End If Waitms 50 Loop End 08. Zaznavanje ovirV 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 tipkeTipka ima tri priključke (označeni so z 1 , 2 in 3), ki jih na vmesnik priključimo takole:
Program za dotik z oviroSedaj 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: Portc.1 = 0$regfile = "m16def.dat" $crystal = 8000000 Config Portc = Output Config Porta = Input Config Portb = Input Do Do Loop Until Pinb.0 = 1 Do 'naprej Portc.0 = 0 Portc.1 = 1 Portc.2 = 0 Portc.3 = 1 Loop Until Pina.1 = 0 'nazaj Portc.0 = 1 Portc.2 = 1 Portc.3 = 0 Wait 1 'stop Portc = 0 Loop End Dopolnite program tako, da bo robotek obšel oviro. 09. IR senzor razdaljePrecej 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. $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.0 = 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 senzorjemPreizkusite 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.0 = 1 Do Portc.0 = 0 'naprej Portc.1 = 1 Portc.2 = 0 Portc.3 = 1 Loop Until Getadc(4) > 400 Portc.0 = 1 'nazaj Portc.1 = 0 Portc.2 = 1 Portc.3 = 0
Wait 1 Portc = 0 End 11. Robot SledilecPreizkusite 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.0 = 1 Do Svetloba = Getadc(4) If Svetloba < 300 Then Portc.0 = 0 Portc.1 = 1 Portc.2 = 0 Portc.3 = 1 Else Portc.0 = 1 Portc.1 = 0 Portc.2 = 1 Portc.3 = 0 End If Waitms 5 Loop End 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.0 , Reload = 10 Servo(1) = 60 Enable Interrupts Do If Pinb.1 = 1 Then Servo(1) = Servo(1) + 5 If Pinb.2 = 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 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 |
Oglej si tudi naslednje povezave: eProDas-Rob1 , Digitalni izhod