aiutino, grazie

salve a tutti, e da poco e ho finito di costruire una specie di macchinina che ha la possibilita' di evitare ostacoli.....il problema e la programmazione.....io per il momento sono riuscito a fargli fare n piccolo comando:

u#include <Servo.h>
int duration; // Stores duratiuon of pulse in
int distance; // Stores distance
int srfPin = 2; // Pin for SRF05
Servo myservo;
Servo myservo2;
void setup()
{ Serial.begin(9600);
myservo.attach(9);
myservo2.attach(10);

}
void loop()
{
pinMode(srfPin, OUTPUT);
digitalWrite(srfPin, LOW); // Make sure pin is low before sending a short high to trigger ranging
delayMicroseconds(2);
digitalWrite(srfPin, HIGH); // Send a short 10 microsecond high burst on pin to start ranging
delayMicroseconds(10);
digitalWrite(srfPin, LOW); // Send pin low again before waiting for pulse back in
pinMode(srfPin, INPUT);
duration = pulseIn(srfPin, HIGH); // Reads echo pulse in from SRF05 in micro seconds
distance = duration/58; // Dividing this by 58 gives us a distance in cm
// myservo.write(90);
// myservo2.write(90);
// delay(10);
if( distance >25)

{
myservo2.write(179);
myservo.write(0);
}
else
{
myservo2.write(90);
myservo.write(0);
}

}

ora come posso fargli fare altri comandi?

Premesso che non sono un espertissimo ma credo che qualche informazioni in piu' su come è la tua macchina sia di aiuto a tutti.
Vedo due servo (Myservo e Myservo2 ) sono servo classici o l'uscita pilota dei motori ? sono collegati alle ruote ? allo sterzo ?
Piu' informazioni dai e piu' aiuto potrai ricevere !

Buon ferragosto

Flavio

ok, all'ora la macchina e composta da due servi a rotazione continua,e dei sensori ping)), o usato gli stessi servi per le ruote e nient'altro....quando incontra un ostacolo ferma misevo e muove misevo2, in effetti gira a sinistra poi quando la strada e libera va dritto, ma se a un ostacolo continuo, gira sempre nello stesso verso

Credo che ci siano diverse strade per evitare il problema,
Ad esempio puoi inserire una variabile random da sommare all'angolo di rotazione in caso di ostacolo, in questo modo ogni volta ruota di un angolo leggermente diverso.
Oppure puoi fare che dopo un certo numero di rotazioni a 90° (diciamo 3 tentativi ) la macchina fa retromarcia e gira di 180° in modo da allontanarsi dall'ostacolo.
Una cosa piu' eleborata sarebbe valutare durante la rotazione se il ping aumenta o diminuisce e in base al risultato decidere se girare a destra o a sinistra.

In bocca al Lupo

Fla

se guardi il codice che ho messo prima , ora io non trovo il modo di farlo girare a destra se incontra un ostacolo, capisci...

{
myservo2.write(179);
myservo.write(0);
}
gira a sinistra sul posto
{
myservo2.write(0);
myservo.write(179);
}
gira a destra sul posto
{
myservo.write(90);
myservo2.write(90);
}
va +/- dritto

A seconda della velocitá tra i 2 servo il robottino gira.
Puoi farlo girare fermando una ruota o facendo girare una ruota in avanti e l' altra indietro.

Ciao Uwe

pero' non so metterci la condizione, cioe se noti il cod. se incontra un ostacolo a 25 cm gira a sinistra, ora se voglio usare il tuo suggerimento. come faccio ad inserirgli i comandi?? grazie

Qua tocca usare la tua fantasia.

Puoi montare 2 sensori, uno che guarda a desra e l' altro che guarda a sinistra e secondo se l'ostacolo é sulla destra o sulla sinistra gira a sinistra o destra.

C'é l' esempio del robottino insegui riga. Puello ha 2 sensori ottici che rilevano la riga e pilota le ruote di consequenza.

Ciao Uwe

io prenderei come spunto il codice che hai riportato e da lì comincerei a fare una serie di esperimentini.

perchè deve girare per forza a sinistra? :smiley: io lo farei girare anche a destra, usando una funzione random

controlla se 25 cm sono tanti, potresti diminuire semplicemente 1 servo per farlo girare nella direzione che ti interessa, come avrai sicuramente capito, maggiore è la differenza dei numeri di giri tra i 2 motorini servo e minore sarà il raggio di curvatura
Sx = 179 Dx = 178 effettua una rotazione con un raggio molto ampio in senso orario (perchè la ruota sx gira leggermente più veloce rispetto alla dx)
Sx = 179 Dx = 0 effettua una rotazione su se stesso in senso orario (perchè la ruota dx gira al contrario alla velocità massima)

0 = indietro tutta
89 = fermo
179 = avanti tutta

spero di averti dato un minimo d'aiuto.
Ciao Marbi