Robot Beginner Kit inseguitore

Il progetto che ti presento oggi è il Robot Beginner Kit inseguitore di Michele, un allievo del mio ultimo corso che ha voluto condividere la sua evoluzione del Robot Beginner Kit.

Robot Beginner Kit inseguitore

L’evoluzione relaizzata di Michele si aggiunge alle altre evoluzioni del robot realizzate e condivise da tanti appassionati di robotica e di arduino.

La particolarità di questa evoluzione è che usa componenti semplicissimi come le fotoresistenze che trasformano il beginner kit nel Robot Beginner Kit inseguitore.

Cosa insegue il Robot Beginner Kit inseguitore ?

Il Robot Beginner Kit inseguitore è programmato per seguire la fonte luminosa che colpisce le sue fotocellule.

Il progetto è stato realizzato in una prima versione dotata di due fotoresistenze ed in grado di girare seguendo la luce.

Come funzione il Robot

Per comprendere il principio su cui è stato realizzato il Robot Beginner Kit inseguitore puoi leggere l’articolo dedicato all’inseguitore solare, trattato in una delle lezioni del corso avanzato e usato da Michele per realizzare il progetto.

… Letto ? ….

Se hai letto l’articolo sai che le due fotoresistenze devono essere posizionate a 90° l’una rispetto all’altra in modo da catturare la luce in modo uniforme su entrambe solo quando la fonte luminosa è perpendicolare.

foto resistenze

L’evoluzione di questo principio fatta da Michele riguarda il controllo dei motori in modo che la rotazione del robot avvenga facendo ruotare in senso inverso le ruote del Robot Beginner Kit inseguitore invece di spostare il servomotore.

Schema di collegamento delle fotoresistenze

Entrambe le fotoresistenze sono state collegate come nello schema seguente:

schema collegamenti

e collegate a loro volta al pin A5 di arduino.

Robot Beginner Kit inseguitore fronte

Lo sketch di Michele

Michele mi ha inviato anche lo sketch che ha realizzato per il progetto perché potessi condividerlo:

#define PWMA 5
#define PWMB 6
#define AIN1 1
#define AIN2 2
#define BIN1 8
#define BIN2 9
#define STBY 0
int sensore = A5;
int vel = 60;
int centrale = 512;
int tolleranza = 50;

void setup()
{
  pinMode( STBY, OUTPUT );
  pinMode( PWMA, OUTPUT );
  pinMode( PWMB, OUTPUT );
  pinMode( AIN1, OUTPUT );
  pinMode( AIN2, OUTPUT );
  pinMode( BIN1, OUTPUT );
  pinMode( BIN2, OUTPUT );
  pinMode( sensore, INPUT );
  digitalWrite( STBY, HIGH );
  analogWrite( PWMA, vel );
  analogWrite( PWMB, vel );
}

void loop()
{

  int dist = analogRead(sensore);
  if ( dist < (centrale-tolleranza) ) {
    girasx();
  }
  else if (dist > (centrale+tolleranza)) {
    giradx();
  } else {
    alt();
  }
  delay(30);
}

void avanti()
{
  digitalWrite( AIN1, LOW );
  digitalWrite( AIN2, HIGH );
  digitalWrite( BIN1, LOW );
  digitalWrite( BIN2, HIGH );
}

void alt()
{
  digitalWrite( AIN1, LOW );
  digitalWrite( AIN2, LOW );
  digitalWrite( BIN1, LOW );
  digitalWrite( BIN2, LOW );
}

void giradx() {
  digitalWrite( AIN1, LOW );
  digitalWrite( AIN2, HIGH );
  digitalWrite( BIN1, HIGH );
  digitalWrite( BIN2, LOW );
}

void girasx() 
{
  digitalWrite( AIN1, HIGH );
  digitalWrite( AIN2, LOW );
  digitalWrite( BIN1, LOW );
  digitalWrite( BIN2, HIGH );
}

gran parte dello sketch è identico a quello presentato per il Robot Beginner Kit che ti invito a leggere per trovare la descrizione minuziosa dello sketch.

Commenterò in quaeto articolo solo i cambiamenti tra lo sketch originale del Robot Beginner Kit e quello scritto da Michele.

La linee 08-11: definisci alcune variabili utili alo sketch:

  • sensore: imposta il pin a cui hai collegato il pin centrale alle due fotoresistenze;
  • vel: imposta una velocità costante
  • centrale: definisce la soglia di valori che ti aspetti dalle fotoresistenze quando ricevono la medesima quantità di luce
  • tolleranza: indica un valore di tolleranza che sottrarrai o sommerai al valore centrale delle fotoresistenze perchè nella pratica un valore così preciso come 512 sarà difficile da ottenere;

linee 15-22: per ciascun pin definito imposta la modalità di INPUT o OUTPUT di funzionamento;

linee 24-25: definisci ed imposta la velocità di rotazione dei motori. In questo sketch Michele ha deciso di impostare nella fase di setup() la velocità costante e non vuole che essa cambi in fase di movimento;

linea 31: leggi il sensore analogico con il comando analogRead() e imposta il valore letto nella variabile dist;

linea 32: valuta se il valore letto dalle resistenze è inferiore alla differenza tra il punto centrale e la tolleranza;

linea 33: se la verifica eseguita alla linea 32 è confermata richiama la funzione girasx() che sposta a sinistra il Robot Beginner Kit inseguitore;

linea 35: controlla se il valore letto è maggiore della somma tra il punto centrale e la tolleranza;

linea 36: in tal caso ruota a destra richiamando la funzione giradx();

linee 37-39: se tutte le condizioni presenti alle linee 32 e 35 non sono verificate esegue la funzione alt() che, ironia nel nome, ferma il robot;

linea 40: attendi un tempo di 30 millisecondi prima di rieseguire la verifica dei valori rilevati dalle resistenze;

linee 43-72: le differenze rispetto al Robot Beginner Kit riguardano la completa mancanza delle accelerazioni e lo sdoppiamento della funzione gira() in girasx() e giradx();

Robot Beginner Kit inseguitore alto

Il video del Robot Beginner Kit inseguitore

Quando Michele ha portato la sua realizzazione al corso abbiamo realizzato un piccolo video:

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/robot-beginner-kit-inseguitore.html

11 comments

1 ping

Skip to comment form

    • Michele on 12 Mar 2014 at 17:05
    • Reply

    ma che bel robottino 🙂
    Ed è pronta la versione a 3 fotoresistenze con i 2 potenziometri per regolare le soglie.

    1. Grazie Michele !!!
      quando avrai pronto foto, sketch, descrizione del progetto e della regolazione soglie mandami tutto con anche il video in cui regoli le soglie che pubblico tutto davvero volentieri.

    • rossa marano on 5 Lug 2014 at 12:54
    • Reply

    Salve ho eseguito una modifica dello sketch per adattarlo alla mia motor shield adafruit, il risultato è che il robot ruota seguendo la luce ma in modo scattoso. Volevo chiedere un parere per modificarlo in modo che il movimento sia più fluido. Questo è lo sketch:

    [ codice rimosso in automatico ]

    1. Ciao Marano, purtroppo come hai letto in fondo ad ogni articolo non è possibile incollare codice nei commenti.

      Il miglior modo per sapere se ciò che hai scritto é corretto é provarlo sul tuo robot 🙂

    • Francesco on 29 Mar 2015 at 23:03
    • Reply

    ma a cosa serve la void avanti, se non viene mai eseguita nel loop, praticamente non va mai avanti dritto

    1. Ciao Francesco,
      trattandosi di una evoluzione del Robot beginner originale originale, l’autore ha preferito lasciare anche le funzioni che non utilizza.

        • michele on 14 Giu 2016 at 13:30
        • Reply

        Ciao, scusate la latitanza dovuta a problemi personali e a pressanti impegni lavorativi.
        la funzione avanti c’è per 2 motivi:
        1) per far vedere come si fa a far andare dritto il robottino
        2) perché se vuoi puoi sostituire alt() con avanti() e, invece di avere il robottino che gira sul posto, puoi portarti il robottino in giro per casa 🙂

        1. Grande Michele, sempre super preciso.

    • enrico on 3 Mar 2016 at 20:58
    • Reply

    ciao, volevo chiederti se era possibile ricevere una foto dello schema di montaggio completo ed anche il programma grazie.

    1. Ciao Enrico,
      lascio il commento on-line in modo che l’autore del progetto possa fornirti ciò che ti occorre.

      • michele on 14 Giu 2016 at 13:36
      • Reply

      In questo articolo hai più informazioni: http://www.mauroalfieri.it/elettronica/robot-beginner-kit-fotoresistenze.html
      per quanto riguarda lo schema di montaggio del robot lo trovi nel robot beginner kit ed è descritto benissimo in altri articoli di Mauro che illustra benissimo sia il montaggio che l’elettronica

  1. […] Robot Beginner Kit inseguitore […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.