cR_2019_lezione9

by / martedì, 25 febbraio 2020 / Published in Archivio Robotica, Corso Robotica 19-20, Robotica

 

LEZIONE n° 9

– ROBOT AVANZATO –

SENSORI

 

 

Con questa lezione proseguiamo a gestire il robot in una maniera “avanzata”. Come detto per prima cosa dobbiamo organizzare l’hardware e seconda del tipo di robot (2 o 4 ruote) e del numero dei sensori. Dovremo porre particolare attenzione al collegamento dei vari blocchi elettrici del robot. Dopo aver collegato in modo adeguato tutti i blocchi potremmo continuare ad organizzare la gestione del robot.

 

Come visto nelle lezioni precedenti per il robot che vogliamo realizzare (explorer junior) avremo almeno bisogno di:

MOTORI (2 + ball caster) = permettono, se opportunamente comandati, di dirigere il robot in ogni direzione ottenendo la NAVIGAZIONE all’interno del labirinto. La ball caster serve a rendere nonostante il movimento il robot stabile.

SENSORI DI URTO (2 + baffi) = con due sensori e con i baffi incrociati possiamo facilmente gestire tre tipi di urto (sinistra, destra e centro). Si possono usare anche dei sensori di distanza agli ultrasuoni ma la loro affidabilità non è molto elevata.

SENSORI DI LUCE (2 o più) = il numero dei sensori di luce dipende molto dal numero dei piedini di Arduino rimasti liberi dopo che sono stati montati gli urti ed i motori. Per gli explorer junior è più semplice poiché avremo un solo tipo di sensori analogici.

DISPOSITIVI DI SEGNALAZIONE = il più semplice è sicuramente il LED, si potrebbe usare anche un display ma richiede un numero elevato di piedini per la sua gestione

 

Il programma (in ordine) del Robot deve:

MANDARLO AVANTI

GESTIRE GLI URTI

GESTIRE LE LUCI

 

Il Robot Avanzato , oltre alle dotazioni base, può avere:

SENSORI DI URTO A DISTANZA

VARI SENSORE DI LUCE

ALCUNI LED o un DISPLAY

 

Il software per il Robot Avanzato , oltre alle dotazioni base, può gestire:

L’USCITA da una TRAPPOLA (CONTARE gli URTI)

TROVARE la LUCE da LONTANO

SEGUIRE i BORDI

 

Vediamo in dettaglio come dobbiamo agire per ottenere il “MASSIMO” dal nostro robot:

 

Cominciamo il lavoro con una considerazione sull’hardware

Spesso, se non quasi sempre, dovremo proteggere il sensore per avere un angolo ridotto di visione della LUCE. Recentemente ho provato un sensore di luce che andava in saturazione solo con la luce ambiente (anche se il laboratorio era molto luminoso il sensore era posizionato lontano dalle finestre). Per farlo funzionare correttamente era necessario creare con le mani il buio. Possiamo concludere che questa operazione è essenziale nel caso il campo di gara sia “molto illuminato”.

Per proteggere i sensori potremmo realizzare, ad esempio mediante una stampante 3D, una struttura ad hoc o più semplicemente

Trovare la luce da LONTANO

Fissare DUE soglie:

se la luce è SOTTO le soglie = NAVIGARE

se la luce è TRA le soglie = GIRARE VERSO LA LUCE

se la luce è SOPRA le soglie = TROVATA LUCE

Per prendere pratica con la programmazione si propone il seguente esercizio:

Tarare inizialmente la luce in modo AUTOMATICO:

Poichè non si può tarare la luce durante la gara, si , si propone il seguente esercizio:

LISTATO ESERCIZIO – Per provare a fare le modifiche proposte copiare il listato (colorato in rosso) ed incollarlo in un editor di solo testo [Notepad ad esempio]

 

/////////////////////////////////////////////////////////////////////

// i tempi per le varie operazioni sono stati fissati TUTTI ad UN SECONDO (VANNO TROVATI I VALORI CORRETTI)

//////////////// CORSO ROBOT 2019-20 LEZIONE n° — 9 — ESERCIZIO n° 19

/////////////////////////////////////////////////////////////////////

 

Serial.print(“\n”);

Serial.print(” WAITING 3 SEC. ” );

Serial.print(“\n”);

delay(TIME_ACQUISITION);

digitalWrite(led_RGB_B, HIGH);

val_pin_light = analogRead(pin_light);

LUX1 = val_pin_light_m;

Serial.print(” READ *** LUX *** LIGHT VALUE = ” );

Serial.print(val_pin_light);

Serial.print(” READ & CONDITIONED LIGHT VALUE = ” );

Serial.print(LUX1);

delay(TIME_ACQUISITION);

digitalWrite(led_RGB_B, LOW);

Serial.print(“\n”);

Serial.print(“\n”);

Serial.print(” WAITING 3 SEC. ” );

Serial.print(“\n”);

delay(TIME_ACQUISITION);

digitalWrite(led_RGB_R, HIGH);

val_pin_light = analogRead(pin_light);

LUX2 = val_pin_light_m;

Serial.print(” READ *** AMBIENT *** LIGHT VALUE = ” );

Serial.print(val_pin_light);

Serial.print(” READ & CONDITIONED LIGHT VALUE = ” );

Serial.print(LUX2);

delay(TIME_ACQUISITION);

digitalWrite(led_RGB_R, LOW);

Serial.print(“\n”);

if (LUX1 < LUX2)

{

Serial.print(“\n”);

Serial.print(” ***** ERROR ***** READING LUX ” );

Serial.print(“\n”);

}

else

{

Serial.print(“\n”);

Serial.print(” ***** SUGGESTED VALUE ***** ” );

Serial.print(“\n”);

if ((LUX1-LUX2)<50)

{

Serial.print(“\n”);

Serial.print(” ***** TOO MANY LIGHT ***** ” );

Serial.print(” NEAR TRESHOLD = ” );

Serial.print((LUX1)-20);

Serial.print(” FAR TRESHOLD = ” );

Serial.print(” 0 *** ZERO *** “);

Serial.print(“\n”);

}

else

{

digitalWrite(led_RGB_G, HIGH);

Serial.print(“\n”);

Serial.print(” ***** SUGGESTED VALUE ***** ” );

Serial.print(“\n”);

Serial.print(” NEAR TRESHOLD = ” );

Serial.print((LUX1)-20);

Serial.print(” FAR TRESHOLD = ” );

Serial.print((LUX2)+ 75);

Serial.print(” GAP = ” );

Serial.print((LUX1-20)-(LUX2+ 75));

Serial.print(“\n”);

}

}

Serial.print(“\n”);

Serial.print(” ***** END of CALIBRATION ***** ” );

Serial.print(“\n”);

one_shot_lux = 0;

/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////

/*************************************************************

END PROGRAM

*************************************************************/

di seguito le slide della lezione

 

 

 

 

(4)

Lascia un commento

TOP