Edoardo Vignali
Range Scanner con Octagon
Tutorials -
Mercoledì 27 Ottobre 2010 17:36
Scritto da Edoardo Vignali

Ciao a tutti, tempo fa lessi questo articolo e lo trovai molto interessante, quando mi arrivò il kit octagon per fare un robottino che avrei dovuto presentare al Linux Day, decisi di fare qualcosa di simile. Avendo a disposizione poco tempo il codice non è perfetto, ma immagino che la linea di principio sia la stessa del robot di Alessandro.

 

Range Scanner

range Scanner

Range Scanner

Includete la libreria Servo.h

#define SONAR_TRIGGER_PIN 2
#define SONAR_ECHO_PIN 3
Servo sensor;
Servo left;
Servo right;
unsigned int current_distance;
int angle = 0;
int dir = 0;
int misura =0;
unsigned int measure_distance()// funzione che misura le distanze
{
   // Manda al sensore una pulsazione di 10 microsecondi
   digitalWrite(SONAR_TRIGGER_PIN, HIGH);
   delayMicroseconds(10);
   digitalWrite(SONAR_TRIGGER_PIN, LOW);

   // Aspetta l'eco.
   unsigned long pulse_length = pulseIn(SONAR_ECHO_PIN, HIGH);
   // aspettiamo 50ms per non creare interferenze
   delay(50);

   // converte in cm e restituisce il valore della distanza
   unsigned int distance = pulse_length / 58;
  Serial.println(distance);
  return distance;   
}


void setup()
{
   pinMode(SONAR_TRIGGER_PIN, OUTPUT);
   pinMode(SONAR_ECHO_PIN, INPUT);
   Serial.begin(9600);
   sensor.attach(8);
   left.attach(9);
   right.attach(10);
   sensor.write(90);
}


void loop()
{  //se la distanza è maggiore di 30 cm avanza
   if(measure_distance()>30) avanza(); 
    //altrimenti
    else{ 
     // Il robot si ferma
      Stop();
      //Aspetta 200 ms
      delay(200);
      //Inizia la scansione
      for(int i = 0; i<12;i++){
        // suddivido 180 gradi in 12 parti
        sensor.write(15*i);
        // se la misura che viene fatta è maggiore di 30 
        // allora salvo in dir l'angolo del sensore
        if(measure_distance()>30) dir =15*i;
      }
      //Se dir è minore di 90 gradi giro a destra
        if(dir < 90)
        destra();
      //Altrimenti giro a sinistra
        else sinistra();
      //Riporto il sensore nella posizione iniziale
      sensor.write(90);
    }
    delay(100);
}

// Funzioni di movimento
void avanza(){
  left.write(180);
  right.write(180);
}
void indietro(){
  left.write(0);
  right.write(0);
}
void destra(){
  left.write(180);
  right.write(0);
}
void sinistra(){
  left.write(0);
  right.write(180);
}
void Stop(){
  left.write(90);
  right.write(90);
}

Eccovi gli schemi

SFR05

Trigger e Echo vanno rispettivamente al pin 2 e al pin 3. I servo per far muovere il corpo sono attaccati ai pin 9 e 10 e il servo del sensore è attaccato al pin 8.

Lista del materiale:

1x Base Octagon

1x Octagon Livello 2

2x Staffa per Servi

1x Staffa per Microservi

1x Arduino

1x SRF05

2x Servo Standard da Modificare

1x Microservo

1x Ruota pivottante in plastica

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi