cR_2019_lezione7

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

 

 

LEZIONE n° 7

ROBOT AVANZATO –

 

 

Con questa lezione cominciamo a gestire il robot in una maniera “avanzata”. 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 cominciare ad organizzare la gestione del robot.

Dovremo porre particolare attenzione alla programmazione di Arduino e quindi:

 

RICORDIAMO I PRINCIPI DELLA PROGRAMMAZIONE DI ARDUINO:

per ulteriori informazioni: http://www.iduesarchiaponi.com/cominciamo-ad-usare-arduino/

 

  • Variabili:
    • Tipo (intero, reale, carattere, etc.)
    • Nome (caratteri alfanumerici)
    • Strutture (corso avanzato)

 

  • Principali comandi:
    • Assegnazione
      • Si calcola l’espressione a sinistra ed il risultato viene assegnato alla variabile a destra
      • Count = count +1
    • IN/OUT
      • Istruzioni per immettere o prelevare dei dati
      • digitalWrite(pin1,LOW)
    • Test
      • Viene eseguito il test (vero o falso) e secondo il valore viene eseguita l’istruzione seguente
      • If (count <= soglia)
        • Istruzione1
        • istruzione2
    • Cicli
      • Vengono eseguite ripetutamente un gruppo di istruzioni
      • For (x=0;x==9;x++)
        • istruzione1

 

Come visto nella lezione precedente 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

ricordiamo che un Robot base è formato da:

2

MOTORI

2

SENSORI DI URTO DIGITALI

1

SENSORE DI LUCE

1

LED

 

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

 

MOTORI: OPERAZIONI da FARE:

1) variare la velocità dei motori

 

URTI: OPERAZIONI da FARE:

1) contare gli urti per uscire dalle trappole

2) contarli separatamente

 

SUGGERIMENTI:

Fissare un contatore (aumentarlo per ogni urto fino al valore fissato)

al valore scelto cambiare il tempo

Provare la navigazione in una “trappola

URTI: Provare i cambiamenti

 

LUCI: OPERAZIONI da FARE:

1) Trovare la luce da LONTANO

 

SUGGERIMENTI:

Eseguire la taratura (hardware) una volta e non modificarla più

Adattare la soglia (software) alla luce ambiente

LUCI: Provare i cambiamenti

inoltre potremmo fare al Robot Avanzato:

ALTRE POSSIBILTA’:

SEGUIRE I BORDI

Categoria SENIOR

etc. etc.

LISTATO DI UN ROBOT – 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

// il contatore è stato inserito nell’URTO SINISTRO

//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 7 — ESERCIZIO n° 17

int TIME_BACK = 1000;

int TIME_SIDE = 1000;

int TIME_SIDE_LUX = 1000;

int TIME_FORWARD_LUX = 1000;

float MOD_TIME_SIDE = 1.35;

int TEMPO_MIN = 6;

int TEMPO_LUX = 3000;

int tempo = 500;

int THRESHOLD_POT_HIGH = 250;

int speed_motor = 75;

int urto_DX = 9;

int urto_SX = 8;

int value_urto_DX = 0;

int value_urto_SX = 0;

int sensorPinLux = A0;

int value_sensorPinLux = 0;

int THRESHOLD_LUX_NEAR = 150;

int THRESHOLD_LUX_FAR = 100;

magic=1;

// vado AVANTI SE NON CI SONO OSTACOLI

avanti(); // direzione AVANTI

Serial.print(” SPEED = ” );

Serial.print(speed_motor);

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

value_urto_DX = digitalRead(urto_DX);

delay(TEMPO_MIN);

value_urto_SX = digitalRead(urto_SX);

delay(TEMPO_MIN);

Serial.print(” URTO DX = ” );

Serial.print(value_urto_DX );

Serial.print(” SX = ” );

Serial.print(value_urto_SX );

// URTO CENTRALE

if ((value_urto_DX == LOW) && (value_urto_SX == LOW))

{

Serial.print(” URTO CENTRO ” );

stop_Motori();

dietro();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_BACK);

destra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_SIDE);

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

magic = 0;

}

// URTO SINISTRA

if ((value_urto_SX == LOW) && (magic==1))

{

if (CountBumpLefth<5)

{

Serial.print(” count n°= ” );

Serial.print(CountBumpLefth);

Serial.print(” LEFT BUMP ” );

stop_Motori();

dietro();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_BACK);

destra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_SIDE);

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

CountBumpLefth = CountBumpLefth +1;

}

else

{

CountBumpLefth = 0;

Serial.print(” count n°= ” );

Serial.print(CountBumpLefth);

Serial.print(” MODIFICATED LEFT BUMP ” );

stop_Motori();

dietro();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_BACK);

destra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_SIDE*MOD_TIME_SIDE); // more time for around

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

}

}

// URTO DESTRA

if ((value_urto_DX == LOW)&&(magic==1))

{

Serial.print(” URTO DESTRA ” );

stop_Motori();

dietro();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_BACK);

sinistra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_SIDE);

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

}

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

* GESTIONE LUCE

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

value_sensorPinLux = analogRead(sensorPinLux);

delay(TEMPO_MIN);

Serial.print(” sensor LUCE = ” );

Serial.print(value_sensorPinLux);

Serial.print(“\n “);

// LUCE VICINA SENSORE

if (value_sensorPinLux >= THRESHOLD_LUX_NEAR)

{

stop_robot();

digitalWrite(led_RGB_G,HIGH);

Serial.print(” TROVATA LUCE SENSORE UNICO \n ” );

delay(TEMPO_LUX);

digitalWrite(led_RGB_G,LOW);

destra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_SIDE_LUX);

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_FORWARD_LUX);

}

// LUCE LONTANA SENSORE

if ((value_sensorPinLux <= THRESHOLD_LUX_NEAR)&&(value_sensorPinLux >= THRESHOLD_LUX_FAR))

{

stop_robot();

digitalWrite(led_RGB_R,HIGH);

Serial.print(” TROVATA LUCE SENSORE UNICO DA LONTANO \n ” );

// delay(TEMPO_LUX);

destra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_SIDE_LUX);

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_FORWARD_LUX);

digitalWrite(led_RGB_R,LOW);

}

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

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

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

END PROGRAM

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

di seguito le slide della lezione

 

 

 

(12)

Lascia un commento

TOP