cR_2019_lezione8

by / mercoledì, 12 febbraio 2020 / Published in Archivio Robotica, Corso Robotica 19-20, Robotica

 

LEZIONE n° 8

– ROBOT AVANZATO –

– MECCANICA –

 

 

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 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

 

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:

 

Per far MUOVERE il robot bisogna AGIRE sul TEMPO

Inizialmente ci vuole più Tempo (bisogna vincere l’attrito)

Dobbiamo per prima cosa impostare il movimento desiderato e successivamente fissare per quanto tempo vogliamo eseguirlo. Dovremo quindi per far navigare il robot gestire tutte le possibilità o gli eventi che avvengono. A titolo di esempio se viene rilevato l’urto destro a dobbiamo (nell’ordine):

Fermare il robot

Tornare poco indietro

Girare a sinistra

Andare avanti

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

far percorrere al robot un triangolo di 80 centimetri e poi fermarlo

Mandare avanti il robot per 80 cm (tempo)

Girare di 120° (tempo)

Ripetere per 3 volte

Fermarsi (variabile che “blocca” l’esecuzione)

LISTATO ESERIZIO – 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 2018-19 LEZIONE n° — 8 — ESERCIZIO n° 18

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

 

int x = 0;

int speed_motor = 75;

int TIME_GO_FORWARD = 2500;

int TIME_GO_RIGHT = 2750;

 

Serial.print(” SPEED = ” );

Serial.print(speed_motor);

magic=1;

// vado AVANTI SE NON CI SONO OSTACOLI

 

if (one_shot1 == 0)

{

Serial.print(“\n”);

Serial.print(” —- TRIANGOLO — ” );

Serial.println(choice);

 

for (x=1;x<=3;x++)

{

Serial.print(” CICLO NUMERO = ” );

Serial.println(x);

avanti();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_GO_FORWARD);

Serial.print(” AVANTI per ” );

Serial.print(TIME_GO_FORWARD);

Serial.print(” MILLI secondi ” );

destra();

analogWrite(pwm_a, speed_motor);

analogWrite(pwm_b, speed_motor);

delay(TIME_GO_RIGHT);

Serial.print(” DESTRA per ” );

Serial.print(TIME_GO_RIGHT);

Serial.println(” secondi ” );

}

 

one_shot1 = 1;

stop_Motori();

}

Serial.println(” ” );

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

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

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

END PROGRAM

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

di seguito le slide della lezione

 

 

 

(12)

Lascia un commento

TOP