CR18_lez08 Robot Avanzato (Meccanica)

by / sabato, 09 Febbraio 2019 / Published in Archivio Robotica, Francesco

 

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 quadrato di 80 centimetri e poi fermarlo

Mandare avanti il robot per 80 cm (tempo)

Girare di 90° (tempo)

Ripetere per 4 volte

Fermarsi (variabile che “blocca” l’esecuzione)

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 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(” —- QUADRATO — ” );
Serial.println(choice);

for (x=1;x<=4;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

 

 

(13)

Lascia un commento

TOP