cR_2019_lezione6

by / mercoledì, 29 gennaio 2020 / Published in Archivio Robotica, Corso Robotica 19-20, Robotica

 

LEZIONE n° 6

ROBOT BASE –

 

 

Con questa lezione cominciamo a gestire tutto il robot. 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

 

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

per iniziare consideriamo un Robot base è formato da:

2

MOTORI

2

SENSORI DI URTO DIGITALI

1

SENSORE DI LUCE

1

LED

MOTORI: OPERAZIONI da FARE:

1) i motori vanno montati uno al contrario dell’altro

2) Trovare la giusta combinazione tra hardware e software

3) Trovare la velocità di spunto

SUGGERIMENTI:

Provare una direzione alla volta

Trovare la velocità adatta

MOTORI: Provare i cambiamenti

 

URTI: OPERAZIONI da FARE:

1) Trovare la giusta combinazione tra hardware e software

2) gestire l’urto centrale

3) TROVARE i TEMPI per le singole operazioni

SUGGERIMENTI:

Provare una variazione (tempo) alla volta

Provare la navigazione in una “trappola

URTI: Provare i cambiamenti

 

LUCI: OPERAZIONI da FARE:

1) Trovare la giusta combinazione tra hardware e software

2) Taratura hardware del sensore

SUGGERIMENTI:

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

Adattare la soglia (software) alla luce ambiente

LUCI: Provare i cambiamenti

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]

 

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

//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 6 — ESERCIZIO n° 15

int TIME_BACK = 1000;

int TIME_SIDE = 1000;

int TIME_SIDE_LUX = 1000;

int TIME_FORWARD_LUX = 1000;

int TEMPO_MIN = 6;

int TEMPO_LUX = 3000;

int tempo = 500;

int THRESHOLD_POT_HIGH = 250;

int PotA_value = 0;

int potentiometerA = A3;

int PotB_value = 0;

int potentiometerB = A5;

int PotB_value_m = 0;

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 sogliaLux = 150;

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(” URTO 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))

{

Serial.print(” URTO SINISTRA ” );

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

}

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

if (value_sensorPinLux >= sogliaLux)

{

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

}

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

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

END PROGRAM

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

di seguito le slide della lezione

 

 

(10)

Lascia un commento

TOP