Laboratoire SUPINFO de recherche en robotique

Utiliser le BOE shield

JFIF``;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90 C     C    }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?7:7k:Ŵq<:\.Lm:;8t*z3>[}^.xɝk+$RH%XC + j<_;J'@l  W*G]һRO`չOo]b1^\ ϛs60k坤 >_(x辇x'şoXxZqa>M7'ֶ,j}Ҋc/.o ͯ6j-qcj8ɕԅS+4l'F4i޿XU5G*V;;O Οi~733r2=+exTөVaN;X_O2! h)! CϽsK [,ȝ>=TSgjIMq]y&83zؒU%f\xKH4']-1Cl3³XW+۩'etio>?,OTGIL0C mw> ,]iOŠw;zmUt?kȀ GI,OE\5ψ kS2ʎ,a[Mj.·éEܩGlGZA gL*zJ}1=((1 |a+9l&cfַwHrp  F3Uƥ3W+J>g|Fq/~ϸH#{67y1z{,3ŷrQgzrzj&ȁ?tz|\*8SQAe;RuR-fk'VKCEYHls`ZגZc;W'eǧ#"sҸ1Orn3l/_6GB+0gcc>e;X$_)!@Aьt''8$sT`m$xڱ[(7(]C.H#hG1F'tmQ(X#NOl~-moondm )'dجG)#EH< 'lziҬ^/ui;u<>܈(k3x9δzngbA_$}h(Q҂?JCWD_f7pɄ־% $[>C2H? jSi_F& - _+9Sr:D!y $ܘ/+PgZ=5t-GTIoe+C28 >fyW1%[a"iRѕX8 /.PX{H Β}@'yQ _bw5"K"/jVz`6smuu8lp;J.-Z䤕$K0\]4R(80qr=Ov1*w<ȿ |ͨ0܋F{ty=z >޻K?÷0RcPN e! m4 jI;9̭w vzgHps]oC?Kzu>F 5E™?sSB[؜LDB$"dU 5]ubn#fMϐ|k.[xb98x(GZ7X6y={K> k'f69V=B3W3~:უLV-5i#% $f w*X8.|_fRmcL)Y^J+UI{J󨹓𾵧~x5 y5-9渖HB.6e28?i6Z)ί gu'uIկF[ۖF|ylqQP۩\NWEiQ5?=߈OyKT1۪^3w;w8;?Umio I?>tFRnoO>gҎf 1+n}ݛ9σjF?} !xnE`XJ`BA\m'9'xzj-$d6T>}プ8.Ny&؊KKG^;굨SjG_R #FI!!I]nj]|5dnj^ͪ==g ^\78Sv$/'JFGVMG,MRiIV2C6ہ#0qh6wp55(ŻŸPִ'(QXh{ϮNmK}|85+Wx.;O z=pε{ln ]TٔPB\UC :sw<ʸ񦬼|Fk-_) vNN ONU5cVVyxB/RF$n+)`z}+힗fr>=۽5HƟ m)*_Zjw`Hc#y'*Uե13Lg/čǺOt}wt'm i}~]s_Xjzw.袸;Fݢ`pv\$܎H'xzhRey-*E,,2jVqjG|k>a3qwfVGn8oBϞWV@#0R`8f/j śjN 8<%JzҺ4Ns~RKQ i݁ >`uQrC˥;/x{o[;KPYۭ4!R\2|'1[Ov}WtQXd)g|?-UXFGQs2{"Ok]Ziuqz\KW : #z׽AI^W$vEo5~Cj^rVHKℱs\p4SB<_w? ]c3ZÍbl$kW*Nt"EsJ ?E坧{{JO,X|m=3 8SrԪSjJ2#_+7זkHm|Jd"9&Nqcw-=y&JqԵoᶁL"'Vo4f8Ep's.N=g??÷RZAYF#p0?2+j8hV|MJtTF?b=ԓUbx}<ٯrIFRGl y]C<"myL2 sOI^DZ-`^K\xO\ZzǧD`5 QY| V j[ʲMnTX<|ypI[-OO;izkXj).Lu{k95)9WVB+gc;|JV*aDHK->0$2##p{bOdt_j'mW crXiKe>[?՗O?YҞ;熵KDд;l]X)wH>n}pR{(U;fϙ!I-.~7*Gi>esv"&{]KOǟ"L?02;)KN;'~ɞ-#Ğ62b8,tvfPG< z&<۱|x"]#F{*(^损,~ԿNKڟNJr!'yx|e; >5|T<O} ( BLȹM[$qWKǩc "V*G܊@#y[I(ݞn*n:ΛA-S^iɫj2Ս%+_.? []i&y$c4YGּ`*2-e`,Wjt)32 ~5{;hgP|Ͼ;֪s#-MkW6%?gR`2LCݯsݧd хX}Kp]BHZd#p8ǭZx' :G,˄\HK(}jwvBzYյ9nm[(UY,I+鰔"'hcqN 'mgē\UH|i%*9'i,ƗtpE#ўAR |90Z$Rol`і1n1#҉{)] c8%X3^dmdTo//N8U)F:2''- \یn!18'LSJ搄M $GYF*;=kIi4zmo?Е%SqE;kpw!Fc]\9us=ަGEmN;꿽#-|%G6OIu*i 4EqymmQ3m'~zg^%5WOC8jyz~)\miLZ~i%f`<:c{T8]'>m?6ѓf6L>#Z3;߱^ܦρס#_@/7O|CewyjבGcbRI #5V+jnft=mDs| "/q,Ckt}3xBrYy,c,܅S9DyںTeBs=Y]:]#Mi42,%pn?0Tt̜+T?/ɧ[{ӧ3I$6d!a/L3`e-TW{Cf9Ov?wtHY)wYۼ˺.T4h=8YF )v<>_n7&|qEH+pSLԙVn\Q|9֝UyoCdRwš$6x\GEesos1[|hW= -xnxBO[皆3۲i?Sba7k̙C1$BĜ_J좺#ki&ʺ.*a 5ښ<zto `li>^j_.&}RM~џI6wx4f )2OddjGb#OWϮ_2?:#iMOYKBHg$kTU~~=$Rk[<0Њs;3>3=5;v?J®et{Ə+^.Ev=lt}Aty3SSX-~׺7tkj1V4;.I9 2U+л>{<+MU墴Yn-ҌmtcF;O1+h]5s?k6OZ1843컼*|tx0iI7;$Vvu{mON~Jd[%n6fvw|u3yiE'k'/.ǑO*Qk~fK[cN|#gymjY3iO]+t/pjTǧĹֲIO9wxo Xg>O=x'h̿.7OpM4Ow 2EAKԶ53-OKedvO xR4[kCo~_?nY#0Eoۤ8 &S%c&<Ǹc1_󎧬=& N8_A8MLf+hշ1$~ݖE9TcK^'x?i.'9/ؠdm\׋Ǟrc:ڜR39P9|A<\jsE=£cߡǥNZrxOf}Oﺣ_ŶƢk6&:4{goz )ck˩^Frdc>ם5-_N4\nw߅ <=EA6 vפgğݶzJ{ +wfft;#h~iQ{ڛAh}d.hbԍzׄgZwz>FQ)d 3%Y`GsmMcmo5gO8iĝ[3qLj&o S$RP˧`1$w'{}-mf[;[?MX[ dBS֫~' 4Cc5@#ts%_,wvNq4޽I"X$Cң*-k,**$3U,Mp4Jc?A4 hMKog-v >ʼ+h]ZIu?D؛oh(FS=Zڹ6t sɒAkFf[ϛNY{> G{?-UNdn+u;>e}2r'< 6o1Q|op_F?w@v܁$ic2nUa/ioPMvԟ?׊|ruuh3w>> 6sx!f[)Nŕ1nFO~9(|urjϪSu>%7R %pz׵In&2Vv>g,9fRH=kݓQE{x(@B09W,m|kc|O? ,>Vԍ,b(L;Ys͆ǵrP*Rf8'#/Gq,RO7N2N+ZT4Z{JAu#WŞ,Uдe4+'.l3p#ܚTo)nWGb'dfňwA Vj>i_+ TW-_菤cE0>8~mtVTܖ60k[[>4!schZ6[~ O}7˻~{cן]GL]Cs oF$TpJ ?s̽܌WڕiQ$xn-i 2cGrO"7a7`78u@zVps\Mx{9G^i]j+nVIdu`;1^:.20R *F9]*-m˹=.#-> JVdGf\t}jdMJsPW=_]xLKbҴx˥ydD?#ov⼘T7;T_Y=;Ln4Ohknǘoݦq8/ I*:f6VvvX!A:rNNk͓.Su$-ٽQY{7>x@֯{VQ6*y+$1=w&'|lYo%]VVyj:y;CGb_N2Sdw-^-*O.em*w 뷯1iڄo.6닇)B'1a݆sé>Z(T>x!U?< DuGꚺMᅗ[o|9ok^3;ukEҙm4Öۖ/u'l= dһi.Vx'@')Ϛl.OIТG*cp>|^g#tx ^<7Bֽ+{xmQdp8\JUine,>Fךgmkx&xĄp8J⇻&5zG@MƼGluG县wן]2 .L?#lc2FҰUtiliser le BOE shield

11 déc, 2014

Vous pouvez retrouver l’article qui va suivre sur le site de l’association RobotLabo qui est composé des étudiants du laboratoire robotique pour pouvoir profiter d’une meilleure lecture :

https://robotlabo.eu/pageTuto/tutoBOEShield.html

 

Pour ce tutoriel nous utiliserons ce kit :

https://www.parallax.com/product/130-35000

Accompagné de celui-ci :

https://www.parallax.com/product/910-28015a

 

Ici quelques photos du montage :

2 1

3 4

5 6

7 8

9

 

 

Maintenant faisons le bouger. Pour faire cela nous allons utiliser l’IDE arduino que vous trouverez ici :

https://arduino.cc/en/Main/Software

 

Pour contrôler les moteurs nous allons avoir besoin de la librairie Servo qui est inclus dans l’IDE arduino. Pour l’importer écrivez cette ligne tout en haut de votre code :

#include <Servo.h>

 

Il faut ensuite déclarer nos moteurs pour cela on va instancier deux éléments de la classe Servo comme ceci :

Servo servoLeft ;

Servo servoRight;

 

Il ne nous reste plus qu’à préciser le port sur lequel ils sont attachés. Comme vous avez pu le voir il y a quatre sorties pour les servos moteur sur le BOE shield nous avons utilisé celles-là.  Le moteur droit étant branché sur le port 12 et le moteur gauche sur le port 13. Pour le préciser au programme nous allons utiliser la méthode attach() :

servoLeft.attach(13);

servoRight.attach(12);

 

Une fois tous ces paramètres définit vous devriez avoir un code qui ressemble à cela :

 

 

#include <Servo.h>

 

Servo servoLeft;

Servo servoRight;

 

void setup()

{

servoLeft.attach(13);

servoRight.attach(12);

}

 

void loop()

{}

 

 

Pour faire avancer nos moteurs nous allons rajouter du code dans la fonction loop ! Et ce code est une méthode : writeMicroseconds() qui va envoyer du courant à notre moteur. Couplé à un delay étant égale au temps ou vos moteurs vont tourner cela fera le travail demandé ! Par contre il faudra arrêter les moteurs après le delay.

Pour savoir quel courant envoyé à nos moteurs référez-vous à ce tableau :

 

 

Voici le code tant attendu :

#include <Servo.h>

 

Servo servoLeft;

Servo servoRight;

 

void setup()

{

servoLeft.attach(13);

servoRight.attach(12);

}

 

void loop()

{

servoLeft.writeMicroseconds(1700);

servoRight.writeMicroseconds(1300);

delay(4000);

servoLeft.writeMicroseconds(1500);

servoRight.writeMicroseconds(1500);

delay(10000);

}

 

Mais bon cela n’est pas trop drôle de juste le voir avancer… Je vais vous donner un petit code pour contrôler votre robot à partir de votre ordinateur grâce au terminal série d’arduino !

 

#include <Servo.h>

 

Servo servoLeft;

Servo servoRight;

 

void setup()

{

Serial.begin(9600);

servoLeft.attach(13);

servoRight.attach(12);

while (!Serial) {

;

}

}

 

void loop()

{

int inByte = 0;

 

if (Serial.available() > 0) {

// get incoming byte:

inByte = Serial.read();

Serial.write(inByte);

if(inByte == 'f'){

servoLeft.writeMicroseconds(1700);

servoRight.writeMicroseconds(1300);

delay(2000);

}

if(inByte == 'b'){

servoLeft.writeMicroseconds(1300);

servoRight.writeMicroseconds(170);

delay(2000);

}

}

else{

servoLeft.writeMicroseconds(1500);

servoRight.writeMicroseconds(1500);

}

}

 

Maintenant utilisons le capteur à ultrason pour s’arrêter devant un obstacle !
Si vous n’avez pas déjà lu notre tutoriel sur le capteur à ultrason c’est par ici :

https://robotlabo.eu/pageTuto/tutoCapteurUltrason.html

 

 

Voici un petit code qui fait avancer le robot jusqu’à une certaine distance préciser en paramètre de la fonction. Puis le robot recul tourne et recommence

 

#include <Servo.h>

 

Servo servoLeft;

Servo servoRight;

 

const int pingPin = 7;

 

void setup()

{

Serial.begin(9600);

servoLeft.attach(13);

servoRight.attach(12);

while (!Serial) {

;

}

}

 

void loop()

{

avancerObstacle(15);

reculer();

tournerDroite();

}

 

 

void avancerObstacle(int distance){

long duration, cm;

 

pinMode(pingPin, OUTPUT);

digitalWrite(pingPin, LOW);

delayMicroseconds(2);

digitalWrite(pingPin, HIGH);

delayMicroseconds(5);

digitalWrite(pingPin, LOW);

 

pinMode(pingPin, INPUT);

duration = pulseIn(pingPin, HIGH);

 

 

cm = microsecondsToCentimeters(duration);

 

delay(100);

 

servoLeft.writeMicroseconds(1600);

servoRight.writeMicroseconds(1400);

 

while(cm > distance)

{

pinMode(pingPin, OUTPUT);

digitalWrite(pingPin, LOW);

delayMicroseconds(2);

digitalWrite(pingPin, HIGH);

delayMicroseconds(5);

digitalWrite(pingPin, LOW);

pinMode(pingPin, INPUT);

duration = pulseIn(pingPin, HIGH);

 

cm = microsecondsToCentimeters(duration);

Serial.print("cm = ");

Serial.println(cm);

Serial.print("distance = ");

Serial.println(distance);

if(cm<distance){

break;

}

delay(100);

}

 

Serial.println("sort de boucle avancer en attendant obstacle");

servoLeft.writeMicroseconds(1510);

servoRight.writeMicroseconds(1500);

}

 

void reculer()

{

Serial.println("dans fonction reculer");

servoLeft.writeMicroseconds(1400); // Pin 13 servo speed = pulse

servoRight.writeMicroseconds(1600);

delay(1000);

servoLeft.writeMicroseconds(1510);

servoRight.writeMicroseconds(1500);

}

 

void tournerDroite()

{

Serial.println("dans fonction tourner droite");

servoLeft.writeMicroseconds(1400); // Pin 13 servo speed = pulse

servoRight.writeMicroseconds(1400);

delay(600);

servoLeft.writeMicroseconds(1510);

servoRight.writeMicroseconds(1500);

}

 

 

 

long microsecondsToCentimeters(long microseconds)

{

return microseconds / 29 / 2;

}

 

 

 

Pour finir ce tuto je vais vous montrez comment faire tourner le servo moteur qui est en dessous du capteur de distance pour le faire tourner précisément.

 

Comme avant il faut le déclarer et lui assigner la broche à laquelle il est branché.

La seule chose qui va changer est la méthode pour envoyer le courant dans le moteur. On utilisera write() au lieu de writeMicroseconds() :

 

 

 

#include <Servo.h>

 

Servo servoTest;

 

void setup()

{

Serial.begin(9600) ;

servoTest.attach(11);

while (!Serial) {

;

}

}

 

void loop()

{

int inByte = 0;

 

if (Serial.available() > 0) {

inByte = Serial.read();

Serial.write(inByte);

if(inByte == 'f'){

servoTest.write(30);

}

if(inByte == 'b'){

servoTest.write(150);

}

}

}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>