Sunteți pe pagina 1din 14

Textul si imaginile din acest document sunt licentiate

Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Codul sursa din acest document este licentiat


Public-Domain Esti liber sa distribui acest document prin orice mijloace consideri (email publicare pe !ebsite " blog printare sau orice alt mijloc# atat timp cat nu aduci nici un $el de modi$icari acestuia% Codul sursa din acest document poate $i utili&at in orice $el de scop de natura comerciala sau nu $ara nici un $el de limitari%

Cum se controleaza sensul de rotatie al unui motor prin Wi-Fi

'n acest tutorial vei descoperi cum se poate controla sensul de rotatie al unui motor de curent continuu utili&and un Arduino (i)i *+ield si un Driver de motoare ,-./% Tutorialul poate $i un punct de start $oarte bun atunci cand vrei sa reali&e&i un robot pe care sa il coman&i de la distanta sau vrei sa controle&i alte dispo&itive prin (i)i% Comanda motorului se va reali&a prin reteaua locala mai exact prin protocolul 0DP% Te vei $olosi de tastatura calculatorului pentru a transmite 1 comen&i catre placa Arduino% Comen&ile sau tastele apasate vor $i preluate printr-o aplicatie scrisa in Processing% 2ei avea nevoie de urmatoarele componente3 4 placa Arduino - +ttp3""!!!%robo$un%ro"arduino Arduino (i$i *+ield - +ttp3""!!!%robo$un%ro"arduino5!i$i5s+ield Driver 6otoare ,-./ versiunea -3 +ttp3""!!!%robo$un%ro"mecanice"driver"s+ield-motoare-l-./-v 0n motor compatibil cu Driver-ul ,-./3 +ttp3""!!!%robo$un%ro"mecanice"motoare Alimentator extern Arduino .2 7 8A3 +ttp3""!!!%robo$un%ro"surse5de5alimentare"alimentatoare"alimentatorextern-arduino-.2

http://www.robofun.ro/forum

Cum se asambleaza ?
Asamblarea celor 1 placi este $oarte simpla3

http://www.robofun.ro/forum

8%

*+ield-ul Arduino (i$i se in$ige in placa Arduino%

-%

*+ield-ul ,-./ se in$ige in pinii s+ield-ului (i)i%

http://www.robofun.ro/forum

http://www.robofun.ro/forum

1% Cele - $ire ale motorului de curent continuu se in$ig in conectorul 64T498 si se $ixea&a $erm prin strangerea suruburilor%

http://www.robofun.ro/forum

:%

*e conectea&a cablul 0*B si alimentatorul extern de .2%

Codul sursa Arduino.


0rmatorul pas este sa incarci in placa Arduino s;etc+-ul de mai jos% Dupa ce ai copiat codul in mediul Arduino urmea&a sa modi$ici cateva linii de cod si anume3
char ssid[] = "default"; // char pass[] = "password"; or use as key for $!) your network SSID (name) // your network password (use for

!"#

2aloarea <de$ault= repre&inta **'D-ul aceasta valoare con$orm routerului tau%

routerului

!ireless%

6odi$ica

2aloarea pass!ord repre&inta parola routerului !ireless% 6odi$ica aceasta valoare con$orm parolei routerului tau%

http://www.robofun.ro/forum

%include &S!I'h( %include & i)i'h( %include & i)i*dp'h( int status = +,ID+$,S-"-*S; char ssid[] = "default"; // your network SSID (name) char pass[] = "password"; // your network password (use for or use as key for $!) int keyInde. = /; // your network key Inde. num0er (needed only for $!) unsi1ned int local!ort = 234/; // local port to listen on

!"#

char packet5uffer[266]; //0uffer to hold incomin1 packet i)i*D! *dp; int int int int 78-89:,!I;: 78-89:,!I;2 78-892,!I;: 78-892,!I;2 = = = = <; 4; 3; 6;

=oid setup()> pin7ode(78-89:,!I;:# pin7ode(78-89:,!I;2# pin7ode(78-892,!I;:# pin7ode(78-892,!I;2#

8*-!*-); 8*-!*-); 8*-!*-); 8*-!*-);

http://www.robofun.ro/forum

1o(266#?266); delay(2///); 1o(?266#266); delay(2///); 1o(/#/); Serial'0e1in(4<//); //*D! @onfi1uration // check for the presence of the shieldA if ( i)i'status() == +,;8,SBI$+D) > Serial'println(" i)i shield not present"); // donCt continueA while(true); D // attempt to connect to ifi networkA while ( status E= +,@8;;$@-$D) > Serial'print(""ttemptin1 to connect to SSIDA "); Serial'println(ssid); // @onnect to !"/ !"2 network' @han1e this line if usin1 open or $! networkA status = i)i'0e1in(ssid#pass); // wait :/ seconds for connectionA delay(:////); D Serial'println("@onnected to wifi"); print ifiStatus();

http://www.robofun.ro/forum

Serial'println("FnStartin1 connection to ser=er'''"); // if you 1et a connection# report 0ack =ia serialA *dp'0e1in(local!ort); D =oid loop() > // if thereCs data a=aila0le# read a packet int packetSiGe = *dp'parse!acket(); if(packetSiGe) > Serial'print("9ecei=ed packet of siGe "); Serial'println(packetSiGe); Serial'print(")rom "); I!"ddress remoteIp = *dp'remoteI!(); Serial'print(remoteIp); Serial'print("# port "); Serial'println(*dp'remote!ort()); // read the packet into packet5ufffer int len = *dp'read(packet5uffer#266); if (strcmp(packet5uffer#":") == /) > 1o(266#?266); D else if (strcmp(packet5uffer#"2") == /) > 1o(?266#266); D else if (strcmp(packet5uffer#"3") == /) > 1o(/#/); D if (len (/) packet5uffer[len]=/; Serial'println("@ontentsA"); Serial'println(packet5uffer); D D =oid print ifiStatus() > // print the SSID of the network youCre attached toA Serial'print("SSIDA "); Serial'println( i)i'SSID()); // print your i)i shieldCs I! addressA I!"ddress ip = i)i'localI!(); Serial'print("I! "ddressA "); Serial'println(ip); // print the recei=ed si1nal stren1thA lon1 rssi = i)i'9SSI(); Serial'print("si1nal stren1th (9SSI)A"); Serial'print(rssi);

http://www.robofun.ro/forum

Serial'println(" d5m"); D =oid 1o(int speed+eft# int speed9i1ht) > if (speed+eft ( /) > analo1 rite(78-89:,!I;:# speed+eft); analo1 rite(78-89:,!I;2# /); D else > analo1 rite(78-89:,!I;:# /); analo1 rite(78-89:,!I;2# ?speed+eft); D if (speed9i1ht ( /) > analo1 rite(78-892,!I;:# analo1 rite(78-892,!I;2# D else > analo1 rite(78-892,!I;:# analo1 rite(78-892,!I;2# D D

speed9i1ht); /);

/); ?speed9i1ht);

Aplicatia Processing.
0rmatorul pas este sa descarci sa instale&i si sa pornesti mediul Processing de la adresa3 +ttp3""processing%org" % Codul sursa care comanda motorul de curent continuu este listat mai jos% Dupa ce ai copiat codul sursa modi$ica urmatoarea linie cu 'P-ul placii Arduino% Acesta il vei a$la din 6onitorul *erial ca in imaginea de mai jos3
Strin1 ip = ":42':<H'2':/:"; // remote ip address

http://www.robofun.ro/forum

http://www.robofun.ro/forum

import hypermedia'net'I; *D! udp; // define the *D! o0Ject

=oid setup() > udp = new *D!( this# </// ); // create a new data1ram connection on port </// //udp'lo1( true ); // &?? printout the connection acti=ity udp'listen( true ); // and wait for incomin1 messa1e D =oid draw() > D =oid key!ressed() > Strin1 ip = ":42':<H'2':/:"; // remote ip address int port = 234/; // destination port if (key == @8D$D) > if (key@ode == *!) > udp'send(":"# ip# port); D else if (key@ode == D8 ;) > udp'send("2"# ip# port); D D else if (key == 5"@KS!"@$) > udp'send("3"# ip# port); D D =oid recei=e( 0yte[] data ) > // &?? default handler //=oid recei=e( 0yte[] data# Strin1 ip# int port ) > // &?? e.tended handler for (int i=/; i & data'len1th; iLL) print(char(data[i])); println(); D

http://www.robofun.ro/forum

Concluzie.
To ce trebuie sa $aci acum este sa pornesti aplicatia in Processing si sa taste&i 0P D4(N si Bac;space% Apasand tasta 0P motorul se va roti intr-un sens apasand tasta D4(N motorul se va roti in sens opus si apasand tasta Bac;space motorul se va opri%

http://www.robofun.ro/forum

S-ar putea să vă placă și