Giorno a tutti ho un problema. Ho realizzato il progetto e il codice ma quando lo carico la macchinina piuttosto di girare quando scende sotto la distanza minima continua ad andare dritta. Potreste dare uno sguardo al codice e vedere cosa c'è di sbagliato, grazie mille in anticipo.
originale.ino (3.12 KB)
Che servo usi? E poi se è una macchinina invece dei servo dovresti usare dei motori, e non dei servo. Comunque dipende da come vuoi muovere i servo. Forse stai usando dei servo che fanno il giro completo
MG946R l'ho sbloccato a 360°
vorrei farli girare di continuo e appena incontra l'ostacolo uno dovrebbe rimanere fermo e l'altro muoversi in modo da ruotare, il problema e che ciò non avviene anche se arriva al disotto della soglia stabilità continuano entrambi i servi ad andare avanti.
Io quando ho fatto il mio robot con sensore ad ultrasuoni "leggendo il tuo sketch, credo che tu stia usando proprio il sensore ad ultrasuoni", inizialmente non sterzava, funzionava male. Prima ti dico di ricontrollare l'hardware (all'inizio io avevo il vizio di fare le schede un po così), poi ricontrolla il software per bene.
Quando ho costruito il mio "usavo un piccolo modulo per il controllo di due motori a 9v, che permetteva di regolare la velocità, andare avanti e indietro, come il servo praticamente". Ho usato questo
lo sketch è questo:
int triggerPort = 8;
int echoPort = 9;
// pin del modulo per il controllo dei motori
//(avanti-dietro-destra-sinista-velocità per 2 ruote)
int enA = 10;
int in1 = 26;
int in2 = 28;
int enB = 11;
int in3 = 22;
int in4 = 24;
void setup()
{
pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin( 9600 );
Serial.println( "Sensore ultrasuoni: ");
}
void loop()
{
digitalWrite( triggerPort, LOW );
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
Serial.print( "durata: " );
Serial.print( duration );
Serial.print( " , " );
Serial.print( "distanza: " );
//dopo 38ms è fuori dalla portata del sensore
if( duration > 38000 ) Serial.println( "fuori portata");
else { Serial.print( r ); Serial.println( "cm" );}
if(r <= 50)
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(enA, 200);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enB, 200);
}
else
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(enA, 200);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enB, 200);
}
}
Credo che non devi fare tutte le "acrobazie" che hai scritto nel tuo sketch. Prova a basarti sul mio.
Poi il sensore ad ultrasuoni è abbastanza semplice da usare, visita il seguente sito e leggilo per bene:
http://scuola.arduino.cc/lesson/b75edfa/Misuratore_di_distanza_con_sensore_ad_ultrasuoni_SRF05
Sì il mio progetto usa il sensore ad ultrasuoni, grazie dopo con calma provo.