Tutorial de Basic Picaxe amb la placa Picaxe-08

  1. Hardware de la placa PICAXE-08

La placa PICAXE-08 porta un xip 8m2 que controla dos motors de CC a partir de la informació que rep de dos sensors CNY70.

El xip 8m2 té un procreador, memòria on guardar el programa i memòria RAM. Els pins 3, 4, 5, i 6 son polivalents i es poden fer servir com a entrades digitals o analògiques,  sortides digitals o analògiques o moltes altres funcions més. Els pins 1 i 8 serveixen per alimentar el xip amb una tensió de 5 volts i els 2 i 7 per comunicar el xip amb l’ordinador i poder programar-lo.

El circuit d’alimentació i comunicació del xip, que està imprès a la placa és el següent:

Per alimentar la placa cal tenir una font de tensió de, com a mínim, 8 volts que pot provenir d’un porta piles. La font d’alimentació està impresa a la placa i porta un diode perquè el corrent no circuli en direcció contraria, un interruptor i un regulador de tensió que crea un voltatge de 5 volts. El voltatge VCC és de 8 a 17 volts i el V+ de 5. Cal recordar que entre V+ i la massa hi ha un condensador de 10uF per evitar interferències. SI la tensió que tenim és inferior a 8 volts cal fer un pont al regulador.

Pel que fa als sensors, utilitzarem els de tipus reflexiu CNY70. Aquests, disposen d’un led emissor de llum i un fototransistor que condueix quan rep la llum del led rebotada en algun objecte clar. El led va alimentat amb 5 volts i una resistència de 220ohm per no cremar-lo i el transistor du un inversor de tensió que dona 5 volts quan el sensor no detecta blanc i res quan el detecta. Pel que fa als motors, es governaran des del xip amb un transistor que obra i tanca el pas de corrent de més de 8 volts a partir d’una senyal de 5 volts. També porta un led per indicar que funciona i una resistència per protegir-lo.









El circuit total de la placa és el següent:


2. Software Basic en el xip 8m2


El 8m2 el programarem amb el programa Picaxe programing editor amb el llenguatge Basic i amb els diagrames de blocs.  Cal recordar que el xip té quatre pins que poden se
r entrades o sortides que són els que nosaltres governarem. Per programar amb Basic encenem el programa, diguem quin tipus de xip volem programar, marquem l’idioma que volem, i el port serie on tenim conectat el robot ( normalment és el tercer ) a l'apartat opcions i ja podrem començar a escriure. Abans de fer això haurem d'instalar el programa Picaxe programming editor i els drivers del cable.

Exemple 1:

El primer que haurem de fer és encendre i parar el motor dret amb una intermitència. El xip llegeix les ordres del programa de dalt a baix. Primer posem la intrucció let dirsC on informarem del pins que seran sortides i entrades, els zeros són entrades i els uns sortides, com que estan escrits amb binari caldrà posar-hi el símbol % al principi.  La numeració del pins és de C.0 a C.5, en aquest cas els motors estan connectats al C.2 i C.4. Important: els números de pins no coincideixen amb aquesta numeració, els pins C.0 i C.5 no es poden utilitzar ja que són pins de comunicació. Després es declaren les quatre variables amb la instrucció symbol i el nom del pin on estan connectats els sensors i els motors. MD és el motor dret ME l’esquerra i els sensors dret i esquerre són SD i SE. El programa es diu inici i porta les instruccions high: engegar sortida, pause: esperar un temps en mil·lisegons, low: parar sortida i goto: que ens porta al programa que nosaltres diem. Els espais, les tabulacions i les claus no són necessàries però ajuden a entendre millor el programa, també podem fer anotacions posant-les entre cometes.

let dirsC = %010100

symbol MD = 2        

symbol ME = 4

symbol SD = pin3

symbol SE = pin1

inici:              

{                                 

            high MD

            pause 500

            low MD

            pause 500

            goto inici

}

 

Ex 2:

Ara, utilitzant les mateixes eines que en l’exercici 1 haurem d’utilitzar els dos motors perquè funcionin com les sirenes de la policia: primer s’engega un i després l’altre i així successivament.

let dirs = %010100 

symbol MD = 2                    

symbol ME = 4

symbol SD = pin3

symbol SE = pin1

inici:              

{                                             

            high MD

            pause 500

            low MD

            high ME

            pause 500

            low ME

            goto inici

}


Exemple 3:

Hi ha moltes maneres de fer intermitències també podem utilitzar la instrucció let pinsC que fa el mateix que la instrucció let dirsC però enlloc de dir quins pins són sortides diu quins pins s’han d’activar. Aquesta instrucció pot encendre a l’hora els pins que nosaltres volem. L’intermitent fet d’aquesta manera és el següent:

let dirsC = %010100          

symbol MD = 2                    

symbol ME = 4

symbol SD = pin3

symbol SE = pin1

inici:                          

{                                                         

            let pinsC = %000100

            pause 500

            let pinsC = %000000

            pause 500

            goto inici

}

Ex  4:

Ara cal fer una les cireres de la policia amb els motors MD i ME però utilitzant el mètode de l’exercici 3.

let dirsC = %010100          

symbol MD = 2                    

symbol ME = 4

symbol SD = pin3

symbol SE = pin1

inici:                          

{                                             

            let pinsC = %000100

            pause 500

            let pinsC = %010000

            pause 500

            let pinsC = %000000

            goto inici

}


Exemple 5:

Ara començarem a llegir la informació de les entrades, per fer-ho utilitzarem la funció if (sí). El que volem fer és engegar el motor dret quan el sensor dret detecti color blanc. Primer posem if i la condició que volem que es compleixi, en aquest cas que el sensor SD estigui off ja que no dona corrent quan detecta línia blanca. Desprès posem then goto i el lloc on volem que vagi si la condició es compleix, en aquest cas a engegar:, si no es compleix, el xip seguirà llegint les línies que venen després de l’if  pararà el motor dret i tornarà a l’inici sense anar a engegar:

let dirsC = %010100

symbol MD = 2                    

symbol ME = 4

symbol SD = pin3

symbol SE = pin1

inici:                                                             

if SD is off then goto engegar     

low MD                                            

goto inici                  

engegar:                                                      

{

            high MD

}

goto inici

 

Ex 6:

Ara caldrà fer un programa que encengui el motor dret quan el sensor dret detecti i el motor esquerre quan el sensor esquerra detecti. Cal recordar que si no posem un goto inici el xip executarà les línies que venen a sota i que si la condició no es compleix el xip es posarà a executar les línies que estan sota l’if. Podem inventar-nos noms com inici i engegar per posar nom a les parts del programa però perquè els if pugin accedir a elles cal posar-hi dos punts.

let dirsC = %010100                                             

symbol MD = 2                                           

symbol ME = 4

symbol SD = pin3

symbol SE = pin1

inici:                                                             

if SD is off then goto engegar1               

low MD                                                                    

if SE is off then goto engegar2   

low ME                                                                    

goto inici                                                                 

engegar1:                                                               

{

            high MD

            if SE is off then goto engegar2

            low ME                                                        

}

goto inici

engegar2:                                                               

{

            high ME

}

goto inici                                          

 

Ex 7:

Ara caldrà fer un programa que activi el motor dret quan tots dos sensors detectin línia. Recordeu que a la condició de l’if si poden posar equacions matemàtiques que es podran complir o no, la funció and (i) i la funció or (o).

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                                     

if SD is off and SE is off then goto engegar                

low MD, ME                                                                                   

goto inici                                                                                         

engegar:                                                                                         

{

            high MD

}

goto inici

 

Ex 8:

Feu el mateix que a l’exercici 7 però ara s’encendrà el motor dret si algun sensor detecta línia.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

if SD is off or SE is off then goto engegar        

low MD, ME                                                                                   

goto inici                                                                                         

engegar:                                                                             

{

            high MD

}

goto inici

 

Ex 9:

Amb el que sabem ja podrem fer un programa que faci que el cotxe segueixi una línia. Per fer-ho haurem de fer unes condicions que facin que els dos motors s’activin quan tots dos sensors detectin línia i que es pari el motor que toca quan un deixi de detectar línia. Cal recordar que podem engegar i parar dos motor a l’hora si posem high MD, ME o low MD, ME.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

if SD is off and SE is off then goto centre        

if SD is off and SE is on then goto dreta

if SD is on and SE is off then goto esquerra                                                                                      

goto inici                                                                                         

centre:                                                                                 

{

            high MD, ME

}

goto inici

dreta:

{

            high ME

            low MD

}

goto inici

esquerra:

{

            high MD

            low ME

}

goto inici

 

Exemple 10:

Ara utilitzarem una funció nova, el for (per) que executa un programa que executa un programa tantes vegades com vulguem però amb cap condició com en l’if. Volem fer 5 intermitències amb el motor dret i després parar-lo 5 segons. Primer hem  de posar for desprès de l’inici:, desprès el comptador que farem servir. El xip pot memoritzar números, té 27 bytes amb 8 bits cada un, cada bit pot ser un zero o un 1 i cada byte pot memoritzar números enters del 0 al 255, els bits es diuen bit0, bit1, bit2... i els bytes b0, b1, b2... Cal recordar que els bits del 0 al 7 formen par del byte 0 i que si canviem els seu valor canviarem el valor del b0. També podem utilitzar words (w0, w1, w2...) que son agrupacions de dos bytes i poden emmagatzemar números del 0 al 65.536. En el nostre cas farem servir el b0 com a comptador.

La funció s’escriu de la manera següent:

for bo = 1 to 5 step 1

Cal posar de quin numero a quin numero ha de contar i les vegades que ha de contar cada vegada, en aquest cas una vegada. Després del programa que vulguem que repeteixi haurem de posar next b0 que posarà a zero el comptador quan el for hagi acabat. Quan estem a la simulació podem veure l’estat del b0 desplegant la finestra de la dreta del dibuix del xip on també hi ha l’estat dels altres bytes.

El programa quedarà de la manera següent:

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

for b0 = 1 to 5 step 1

{

            high MD

            pause 500

            low MD

            pause 500

            next b0

}

pause 5000

goto inici


Ex 11:

Ara cal fer un for que faci, amb el motor dret 10 impulsos d’un segon cada un, després 5 de dos segons cada un i després torni a començar. Amb la instrucció sleep podem posar el temps d’espera amb segons i no amb mil·lisegons com amb els pauses. Per fer un impuls de 2 segons cal que el motor estigui un segon encès i un segon parat.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

for b0 = 1 to 10 step 1

{

            high MD

            pause 500

            low MD

            pause 500

            next b0

}

for b0 = 1 to 5 step 1

{

            high MD

            sleep 1

            low MD

            sleep 1

            next b0

}

goto inici

 

Ex12:

Hi ha una altra manera de fer el bucle if més fàcil que la que hem ensenyat anteriorment, consisteix en posar l’if, la condició, then, a la línia de sota les accions que volem que faci si la condició es compleix i a la línia següent end if per separar les accions que només ha de fer quan la condició es compleix.

Exemple:

if SD is off and SE is off then

high MD, ME

end if

Ara caldrà fer un programa per un robot rastrejador però d’aquesta manera:

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

if SD is off and SE is off then

high MD, ME

end if

if SD is off and SE is on then

high MD

low ME

end if

if SD is on and SE is off then

high ME

low MD

end if

goto inici

 

Exemple 13:

Al Picaxe programing editor hi ha un altre bucle anomenat do, while (fer, mentre) que va repetit sol una sèrie d’accions sempre i quan es compleixi una condició. Això també es pot fer amb l’if i amb els goto que havíem estudiat als exercicis 5, 6, 7... primer es posa do, després les accions que s’han de realitzar i finalment es posa loop while condició. En aquest programa el motor dret fa una intermitència sempre que el sensor dret detecti línia. Cal recordar que aquest bucle primer fa l’acció i després comprova si la condició es compleix per tornar-la a fer. Per tant pot ser que faci l’acció una vegada sense que la condició es compleixi.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

do

high MD

pause 500

low MD

pause 500

loop while SD is off

low MD

sleep 5

goto inici


Exemple 14:

L’últim bucle que estudiarem es el do sense while que simplement fa les coses que té a sota varies vegades sense condicions. Si només fes això podríem substituir el do per un capçal de programa com inici: i un goto però, en un do, podem posar-hi un if condició then exit que sortiria del bucle un cop es complís una condició. Cal posar un do i un loop sense while.

Ex: Volem que el motor dret faci un parpelleig i quan el sensor dret deixi de detectar línia que surti.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

do

high MD

pause 500

low MD

pause 500

if SD is on then exit

loop

inici2:

if SD is off then goto inici

goto inici2

 

Ex 15:

Ara, utilitzant el do caldrà fer que els dos motors funcionin com les sirenes de la policia i parin quan tots dos sensors no detectin línia, donin corrent. Es important pensar que quan sortim del bucle si qualsevol sensor es posa a detectar línia, deixa de donar corrent, caldrà tornar al bucle do.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

do

high MD

pause 500

low MD

high ME

pause 500

low ME

if SD is on and SE is on then exit

loop

inici2:

if SD is off or SE is off then goto inici

goto inici2

 

Llistat d’intrusions apreses:

  • Let dirs %xxxxxxxx
  • Llet pins %xxxxxxxx
  • High pin
  • Low pin
  • Pause Tms
  • Sleep Ts
  • Symbol nom = pinx
  • Capçalera:
  • Goto capçalera

 

Llistat de bucles apresos:

  • if condició then goto capçalera`
  • if condició then

accions

end if

  • for b0 = x to x step 1

accions

next b0

  • do

accions

loop

  • do

accions

loop while condició

  • do

accions

if condició then exit

loop

Funcions lògiques bàsiques que es poden posar als bucles:

And, or, is on, is off, =, >, <, <> (diferents), >=, <=.

 

Ex 16:

Ara que ja sabem moltes coses del Picaxe programing editor caldrà fer un programa per seguir una línia millor del que hem fet anteriorment per fer que el cotxe vagi millor. Una bona idea seria que quan el robot deixi de detectar línia deixi un motor encès i l’altre, enlloc de parat, que faci polsos amb temps molt petits de mil·lèsimes de segon. Això farà que una roda tingui tot el voltatge i l’altre un voltatge mig ja que si encenem i parem un motor moltes vegades per segon semblarà que està mig encès.

let dirsC = %010100          

symbol MD = C.2                

symbol ME = C.4

symbol SD = pin3

symbol SE = pin1

inici:                                                                         

if SD is off and SE is off then

high MD, ME

end if

if SD is off and SE is on then

high MD, ME

pause 5

low ME

pause 5

end if

if SD is on and SE is off then

high ME, MD

pause 5

low MD

pause 5

end if

goto inici

 

Ex 17:

Per millorar el cotxe podem canviar el temps dels polsos de cada un del bucles. Sabem que hi ha 3 bucles el d’anar endavant, el de girar a la dreta i el de girar a l’esquerra. Si fem que tots els polsos tinguin un Toff més gran el robot anirà més lent, si fem un Ton més gran, més ràpid i si augmentem la diferencia de voltatge del motors quan el robot gira farem que giri més bruscament.

Ara caldrà comprovar quins temps son millors per el nostre robot per que segueixi bé la línia a la pràctica. Si el robot es mou molt segurament és perquè gira massa bruscament, si surt de les curves segurament perquè va massa ràpid o gira massa poc. Podreu fer una competició entre vosaltres per saber qui programa millor. Si el robot no fa res de bo no os desanimeu perquè al principi és normal.



Tot siguit hi ha els exercicis fets amb el Picaxe Programing Editor.                                    
ċ
Equip Robolot,
9 ag. 2012 , 2:16
Comments