.. note::
Ciao, benvenuto nella community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme a noi.
**Perché unirsi a noi?**
- **Supporto tecnico**: Risolvi i problemi post-vendita e le sfide tecniche con l'aiuto della nostra community e del nostro team.
- **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
- **Anteprime Esclusive**: Accedi in anteprima ai nuovi annunci sui prodotti.
- **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni e Giveaway Festivi**: Partecipa a promozioni festive e concorsi a premi.
👉 Pronto per esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi!
Lezione 6: Esplorare il Modulo di Evitamento Ostacoli
==============================================================
Stiamo per esplorare il mondo del Modulo a Infrarossi per l'Evitamento degli Ostacoli. Montati ai lati del nostro Mars Rover, questi sensori agiscono come gli "occhi" del rover, aiutandolo a evitare ostacoli laterali e a navigare in sicurezza sul suolo marziano.
Impareremo come integrare questi moduli con il nostro rover, scopriremo il funzionamento che c'è dietro e svilupperemo del codice per far sì che il nostro rover eviti in modo intelligente qualsiasi ostacolo incontri.
Preparati a dotare il nostro rover di una straordinaria intelligenza per evitare ostacoli marziani! Cominciamo!
.. raw:: html
.. note::
Se stai seguendo questo corso dopo aver assemblato completamente il GalaxyRVR, devi spostare questo interruttore verso destra prima di caricare il codice.
.. image:: img/camera_upload.png
:width: 500
:align: center
Obiettivi di Apprendimento
-----------------------------
* Comprendere il principio di funzionamento e l'applicazione del modulo a infrarossi per l'evitamento degli ostacoli.
* Imparare a usare Arduino per controllare il modulo a infrarossi.
* Progettare e costruire un sistema di evitamento automatico degli ostacoli basato su infrarossi.
Materiali necessari
------------------------
* Moduli di evitamento ostacoli
* Strumenti e accessori di base (es. cacciavite, viti, fili, ecc.)
* Modello Mars Rover (con sistema rocker-bogie, schede principali, motori)
* Cavo USB
* Arduino IDE
* Computer
Passaggi
-------------
**Passo 1: Installare il Modulo di Evitamento Ostacoli**
Ora installeremo i due moduli di evitamento ostacoli sul rover.
.. raw:: html
I passaggi per l'assemblaggio sono stati semplici, vero? Nei passaggi successivi, apprenderemo il principio di funzionamento di questi moduli e come aiutano il nostro Mars Rover a evitare ostacoli. Resta sintonizzato!
**Passo 2: Scoprire il Modulo**
Incontriamo il Modulo a Infrarossi per l'Evitamento degli Ostacoli: il nostro piccolo assistente intelligente. Questo dispositivo è pieno di meraviglie. Facciamo un tour:
.. image:: img/ir_avoid.png
:width: 300
:align: center
Ecco i pin del modulo:
* **GND**: È come l'ancora del modulo, collegandolo a terra o al punto comune nel circuito.
* **+**: Qui il modulo riceve energia, con un'alimentazione da 3,3 a 5V DC.
* **Out**: Questo è il comunicatore del modulo. Di default, resta alto e scende a basso solo quando rileva un ostacolo.
* **EN**: Questo è il controllore del modulo. Il pin **enable** decide quando il modulo deve funzionare. Di default, è collegato a GND, il che significa che il modulo è sempre in funzione.
Ti incuriosisce come funziona questo piccolo modulo? È piuttosto interessante! Utilizza una coppia di componenti a infrarossi: un trasmettitore e un ricevitore. Il trasmettitore è come una torcia che emette luce a infrarossi. Quando appare un ostacolo, la luce infrarossa viene riflessa e catturata dal ricevitore. Il modulo quindi invia un segnale basso, avvisando il rover dell'ostacolo.
.. image:: img/ir_receive.png
:align: center
Il nostro piccolo modulo è piuttosto robusto, rilevando ostacoli entro un raggio
di 2-40 cm e vantando eccellenti capacità anti-interferenza. Tuttavia, il colore
degli oggetti influisce sulla sua capacità di rilevamento. Oggetti più scuri,
soprattutto neri, vengono rilevati a una distanza più breve. Contro un muro bianco,
il sensore è più efficiente, rilevando entro una distanza di 2-30 cm.
Il pin **EN** attiva il modulo quando è in stato basso, con il ponticello che collega il pin **EN** al GND. Se desideri controllare il pin **EN** tramite codice, il ponticello deve essere rimosso.
.. image:: img/ir_cap.png
:width: 400
:align: center
Ci sono due potenziometri sul modulo, uno per regolare la potenza di trasmissione e uno per regolare la frequenza di trasmissione, e regolando questi due potenziometri è possibile regolare la distanza di rilevamento.
.. image:: img/ir_avoid_pot.png
:width: 400
:align: center
Abbiamo scoperto molto su questo piccolo modulo. Nel prossimo passaggio impareremo come integrarlo con il nostro rover e controllarlo usando Arduino. Resta sintonizzato!
**Passo 3: Leggere dai 2 Moduli**
Come curiosi esploratori spaziali, tuffiamoci nell'universo dei codici e dei sensori!
#. Il nostro Mars Rover è dotato di due speciali sensori, posizionati sui pin 7 (destra) e 8 (sinistra). Questi sensori a infrarossi evitano costantemente "rocce spaziali" (ostacoli) nel viaggio interstellare del nostro Rover!
.. image:: img/ir_shield.png
#. Successivamente, comunicheremo con il nostro Rover utilizzando il linguaggio universale del codice Arduino.
Per prima cosa, diamo un nome a ciascun "occhio" del Rover. Chiamiamoli ``IR_RIGHT`` e ``IR_LEFT``, così non li confonderemo.
.. code-block:: arduino
#define IR_RIGHT 7
#define IR_LEFT 8
Ora, facciamo sapere al nostro Rover che questi sono i suoi occhi speciali, che forniranno informazioni dal mondo esterno al cervello elettronico del Rover.
.. code-block:: arduino
pinMode(IR_RIGHT, INPUT);
pinMode(IR_LEFT, INPUT);
Per assicurarci che il Rover condivida le sue scoperte con noi, avviamo una comunicazione seriale alla velocità di 9600 bit al secondo: un dialogo ultra veloce!
.. code-block:: arduino
Serial.begin(9600);
Ora, il nostro Rover scandaglia l'ambiente circostante con i suoi "occhi alieni" e ci comunica le sue scoperte. Se rileva un ostacolo, il valore sarà 0; se il percorso è libero, sarà 1. Continua a inviarci questi messaggi, tenendoci aggiornati.
.. code-block:: arduino
int rightValue = digitalRead(IR_RIGHT);
int leftValue = digitalRead(IR_LEFT);
Serial.print("Right IR: ");
Serial.println(rightValue);
Serial.print("Left IR: ");
Serial.println(leftValue);
Infine, il Rover si prende una pausa di 200 millisecondi tra ogni trasmissione, permettendoci di interpretare i suoi messaggi prima che ne invii un altro.
.. code-block:: arduino
delay(200);
Ecco il codice completo:
.. raw:: html
#. Una volta pronto il codice, seleziona la scheda corretta e la porta, e carica il codice sul tuo Mars Rover. Poi, sintonizzati sulla comunicazione segreta (il Monitor Seriale) cliccando sull'icona in alto a destra.
.. image:: img/ir_open_serial.png
#. Prima di ricevere i messaggi del Rover, assicurati che la linea di comunicazione sia sintonizzata alla stessa velocità (9600 baud) del Rover. Ed ecco che arrivano gli aggiornamenti in diretta!
.. image:: img/ir_serial.png
#. Per testare il sistema, fai passare una "roccia spaziale" (la tua mano) davanti a uno dei sensori. Vedrai il valore cambiare a 0 e il LED corrispondente sul modulo si accenderà. È il Rover che dice: "Attenzione, roccia spaziale alla mia destra!"
.. code-block::
Right IR: 0
Left IR: 1
Right IR: 0
Left IR: 1
Right IR: 0
Left IR: 1
Ora, non solo abbiamo viaggiato nello spazio, ma abbiamo anche decifrato il linguaggio marziano! Non vedo l'ora di scoprire i segreti interstellari nella nostra prossima missione!**Passo 4: Regolare la Distanza di Rilevamento**
**Passo 4: Regolazione della Distanza di Rilevamento**
Siamo arrivati a un passaggio cruciale: regolare la distanza di rilevamento dei nostri sensori in base all'ambiente circostante. Le impostazioni di fabbrica potrebbero non essere ottimali.
Se la distanza di rilevamento dei due moduli a infrarossi è troppo breve, il Mars Rover potrebbe urtare contro gli ostacoli. Se invece è troppo lunga, il Rover potrebbe iniziare a sterzare troppo presto, mentre è ancora a una notevole distanza dall'ostacolo, influenzando il suo movimento.
Ecco come puoi fare le regolazioni:
#. Inizia regolando il modulo di evitamento ostacoli destro. Durante il trasporto, gli urti potrebbero far inclinare il trasmettitore e il ricevitore del modulo a infrarossi. Pertanto, sarà necessario raddrizzarli manualmente.
.. raw:: html
#. Posiziona un ostacolo a circa 20 cm direttamente davanti al modulo destro. La scatola del nostro kit Rover è una buona scelta per questo! Ora, ruota il potenziometro sul modulo fino a quando la spia sul modulo si accende. Poi, continua a muovere l'ostacolo avanti e indietro per controllare se la spia si accende alla distanza desiderata. Se la luce non si accende alla distanza corretta o rimane accesa senza spegnersi, dovrai regolare l'altro potenziometro.
.. raw:: html
#. Ripeti lo stesso processo per l'altro modulo.
Ora che i nostri sensori sono completamente regolati, siamo pronti per intraprendere la prossima avventura!
**Passo 5: Progettare un Sistema di Evitamento Ostacoli Automatico**
Ora facciamo un grande passo nella nostra esplorazione spaziale e utilizziamo questi segnali dal Rover. Creeremo un sistema automatico di evitamento ostacoli!
Ecco il nostro piano: se il sensore destro rileva un ostacolo, il Rover si girerà
all'indietro verso destra. Se il sensore sinistro rileva un ostacolo, il Rover si
girerà all'indietro verso sinistra. Se entrambi i sensori rilevano un ostacolo, il
Rover si muoverà all'indietro. Se non vengono rilevati ostacoli, il Rover continuerà a muoversi in avanti.
Visualizziamo questo piano in un diagramma di flusso per renderlo ancora più chiaro.
I diagrammi di flusso sono un ottimo modo per delineare logicamente un piano,
soprattutto quando si tratta di programmazione!
.. image:: img/ir_flowchart.png
Comunichiamo questo piano al nostro Rover nel suo linguaggio (codice Arduino):
.. raw:: html
In questo codice, stiamo utilizzando l'istruzione ``if...else`` nella funzione ``loop()``.
L'istruzione ``if...else`` viene utilizzata per eseguire un blocco di codice tra due alternative.
Tuttavia, quando dobbiamo scegliere tra più di due alternative, usiamo l'istruzione ``if...else if...else``.
La sintassi dell'istruzione ``if...else if...else`` è la seguente:
.. code-block:: arduino
if (condizione1) {
// blocco di codice 1
}
else if (condizione2){
// blocco di codice 2
}
else if (condizione3){
// blocco di codice 3
}
else {
// blocco di codice 4
}
Here,
* If condition1 is true, code block 1 is executed.
* If condition1 is false, then condition2 is evaluated.
* If condition2 is true, code block 2 is executed.
* If condition2 is false, then condition3 is evaluated.
* If condition3 is true, code block 3 is executed.
* If condition3 is false, code block 4 is executed.
Ora che abbiamo progettato il nostro sistema automatico di evitamento ostacoli, è tempo della parte più emozionante: metterlo alla prova!
* Puoi osservare se il Rover si muove come ti aspettavi.
* Oppure, posizionalo in diverse condizioni di illuminazione per vedere come cambiano i suoi movimenti.
Integrando la scienza nel nostro progetto ingegneristico, stiamo diventando detective spaziali, risolvendo i misteri del comportamento del nostro Rover. Non si tratta solo di correggere errori, ma di ottimizzare le prestazioni, rendendo il nostro Rover il migliore possibile! Continua così, detective spaziali!
**Passo 6: Riflessione e Sintesi**
Nella fase di test, potresti aver notato un comportamento interessante del nostro Mars Rover: mentre evita ostacoli a sinistra e a destra con maestria, potrebbe avere difficoltà a rilevare piccoli ostacoli direttamente davanti.
Come possiamo risolvere questa sfida?
Resta sintonizzato per la prossima lezione, dove continueremo la nostra esplorazione nel mondo affascinante della programmazione, dei sensori e del rilevamento degli ostacoli.
Ricorda, ogni sfida è un'opportunità per imparare e innovare. E mentre continuiamo il nostro viaggio di esplorazione spaziale, c'è ancora tanto da scoprire e imparare!