Pages: [1]   Go Down
Author Topic: Far girare a destra e sinistra il mio robottino  (Read 847 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho costruito questo robottino

http://imageshack.us/a/img854/5521/imag0317kl.jpg

con arduino uno e shield motori 2A e gli ho caricato questo programmino:
char comando, vel;
int velocita=255;
const int pinsensore=2;
int statesens=HIGH;

void setup(){
Serial.begin(9600);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(pinsensore,INPUT);
}

void loop(){
if(digitalRead(pinsensore)==LOW) stop();
if(Serial.available()>0){
comando=Serial.read();
Serial.println(comando);
switch(comando){
case 'g': go();break;
case 's': stop(); break;
case 'b': back(); break;
case 'r': right(); break;
case 'l': left();go(); break;
case 'm': delay(500);
vel=Serial.read();
if(vel=='1') velocita=100;
else if(vel=='2') velocita=180;
else if(vel=='3') velocita=255;
if(vel) Serial.println("Velocita' modificata");
break;
}
}
}

void go(){
//Motore sinistro
digitalWrite(7,LOW);
analogWrite(6,velocita);
//Motore destro
digitalWrite(4,LOW);
analogWrite(5,velocita);
}
void stop(){
//Motore sinistro
digitalWrite(7,LOW);
analogWrite(6,0);
//Motore destro
digitalWrite(4,LOW);
analogWrite(5,0);
}
void back(){
//Motore sinistro
digitalWrite(7,HIGH);
analogWrite(6,velocita);
//Motore destror

digitalWrite(4,HIGH);
analogWrite(5,velocita);
}
void right(){
//Motore sinistro
digitalWrite(7,HIGH);
analogWrite(6,velocita);
//Motore destro
digitalWrite(4,LOW);
analogWrite(5,velocita);
}
void left(){
//Motore sinistro
digitalWrite(7,HIGH);
analogWrite(6,velocita);
//Motore destro

}
Link della shield motori che uso:
http://www.dfrobot.com/wiki/index.php?title=Arduino_Motor_Shield_(L298N)_(SKU:DRI0009)
tralasciando le righe di codice inerenti al sensore IR,quando tento di girare il robottino a destra o sinistra(case left/right) o gira su se stesso o va dritto.come mai?come devo modificare le funzioni left(),right() ??Io vorrei che quando deve girare a destra il mio robottino si fermi giri di 90° a destra e poi vada avanti.come faccio??avevo pensato di usare
la libreria simpletimer ma non so come implementare il tutto.mi aiutate???
Grazie
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20208
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intendevi questo prodotto? http://www.dfrobot.com/index.php?route=product/product&path=51_105&product_id=69
Quella scheda ha 2 modi fi funzionare:
PWM Mode : selezioni direzione e velocitá
PPL Mode selezioni enable e direzione, non puoi regolare la velocitá.
I due modi li solezioni con i 4 jumper.

Se hai usi il PWM mode:
Per fare una curva devi cambiare il raporto di velocitá tra i due motori. Se il motore dx gira piú lento del sinistro il robottino gira a destra e viceversa.
Per fare una curva lenta devi dare poca differenza di velocitá per una corva con raggio piú piccolo una differenza di velocitá maggiore. Se fermi uno dei ue motori il robottino userá la ruota ferma come asse della curva. se fai andare un motore in una direzione e l'altro nell altra direzione il robotino gira su se stesso.

Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mmm nn ho capito molto..cioè solo l'utilizzo del pmw mode ma come faccio a farlo ruotare di 90° sfruttando la libreria simpletimer??Grazie
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20208
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non so mica; dipende dal Tuo robotino quanto in valore di gradi si gira se la differenza di velocitá é X.
Ciao Uwe
Logged

Pages: [1]   Go Up
Jump to: