Robot Beginner Radio ricevitore xbee

… riprendendo il progetto presentato Lunedì Robot Beginner Radio il trasmettitore xbee oggi costruisci il Robot Beginner Radio ricevitore

Robot Beginner Radio ricevitore shield

Il ricevitore del tuo robot usa arduino come controllore la motor shield arduino per gli spostamenti e un modulo xbee per ricevere i segnali del trasmettitore.

Cosa rende il progetto differente dalla comune automobile radiocontrollata?

Innanzitutto lo stai realizzando tu e quindi sei a conoscenza di tutti i meccanismi di funzionamento del Robot Beginner Radio ricevitore;

in secondo luogo potrai aggiungere funzioni specifiche per i tuoi progetti che su un prodotto acquistato non sempre è possibile

in ultimo, non per importanza, ho aggiunto al progetto un sensore di prossimità ad infrarossi che ti permette di decidere quando il Robot Beginner Radio ricevitore incontra un ostacolo come deve comportarsi.

Il materiale necessario per il Robot Beginner Radio ricevitore

Parti con la lista del materiale utilizzato per il Robot Beginner Radio ricevitore:

Robot Beginner Radio materiale

Parte elettronica

  • n.1 arduino uno ( incluso nel Robot Beginner Kit )
  • n.1 arduino motor shield
  • n.1 adattatore xbee arduino
  • n.1 modulo xbee
  • n.1 sensore di prossimità sharp ( incluso nel Robot Beginner Kit )
  • n.2 cavetti per breadboard F/M

Parte meccanica

Puoi decidere di utilizzare la base meccanica che preferisci per realizzare il tuo robot io ho utilizzato una di quelle a mia disposizione.

Il montaggio del ricevitore

Pe ril montaggio della parte meccanica ti rimando all’articolo di assemblaggio del Robot Beginner Kit.

Il montaggio della parte elettronica, sebbene la maggior parte del montaggio avviene con la formula a panettone è necessario che tu faccia attenzione in alcuni passaggi:

Step 1 – Monta i cavetti per breadboard

Robot Beginner Radio partenza step1

i due cavetti vanno collegati uno al +5v e l’altro al Gnd del connettore ICSP di Arduino

Step 2 – Inserisci la motor shield

Robot Beginner Radio motor shield step2

il montaggio è a panettone con l’accortezza di piegare leggermente i primi 2 pin dal lato alimentazione in modo che non vadano a toccare i condensatori di arduino

Step 3 – collega i cavi dei motori

Robot Beginner Radio cavi motore step3

negli appositi morsetti connessi al canale A ed al canale B devi collegare i cavetti provenienti dai motori della base del Robot Beginner Radio ricevitore.

Step 4 – Collega l’alimentazione del sensore SHARP

Robot Beginner Radio collegamento sensore step4

il sensore sharp presenta 3 pin di cui due sono +5v e Gnd che puoi collegare sui rispettivi pin della motor shield come mostrato in figura

Step 5 – Proteggi i collegamenti di alimentazione

Robot Beginner Radio protezione sensore step5

per evitare corto circuiti ti consiglio di applicare un pezzo di nastro isolante sui due pin appena collagti di alimentazione del sensore

Step 6 – Montaggio dell’adattatore XBee arduino

Robot Beginner Radio Xbee module step6

monta l’adattatore sul castello di shield appena costruito. In particolare l’adattatore xbee è di solito alimentato attraverso il connettore ICSP di arduino, quando la scheda è montata direttamente su arduino, in questa configurazione il connettore ICSP non ha i contatti riportati sulla motor shield per cui non potrebbe essere alimentata.

Step 7 – Collega i cavetti +5v e Gnd

Robot Beginner Radio Cavi superiori step7

l’ultimo passaggio è il collegamento dell’alimentazione per l’adattatore xbee che puoi eseguire con i cavetti connessi all’ICSP allo step 1 e del cavetto giallo del sensore al pin A5.

Lo sketch del Robot Beginner Radio ricevitore

/*
 *
 *  Sketch di Ricezione xBee Robot Beginner
 *
 * @autor Mauro Alfieri
 * @url: https://www.mauroalfieri.it
 * twitter: @mauroalfieri
 *
 */

int D1 = 12;
int D2 = 13;
int P1 = 3; 
int P2 = 11;

int SHIR = A5;
int SENS = 150;

int pwm1 = 0;
int pwm2 = 0;

void setup() {

  Serial.begin( 57600 );

  pinMode(D1,OUTPUT);
  pinMode(D2,OUTPUT);
  pinMode(P1,OUTPUT);
  pinMode(P2,OUTPUT);

  pinMode( SHIR,INPUT );

  digitalWrite( D1,LOW );
  digitalWrite( D2,LOW );

  analogWrite( P1,0 );
  analogWrite( P2,0 );
}

void loop() {

  int dist = analogRead( SHIR );

  if (Serial.available() > 2) {

    int valX = Serial.read();
    int valY = Serial.read();

    if (0 <= valX && valX <= 120 )   {
        digitalWrite(D1,LOW);
        digitalWrite(D2,LOW);

        pwm1 = map(valX,120,0,0,100);

        analogWrite(P1,pwm1);
        analogWrite(P2,pwm1);
    }
    if (135 <= valX && valX <= 255) { 
        digitalWrite(D1,HIGH);
        digitalWrite(D2,HIGH);

        if ( dist < SENS ) { pwm1 = map(valX,135,255,0,100); }
        else               { pwm1 = 0; }
        analogWrite(P1,pwm1);
        analogWrite(P2,pwm1);
    } 

    if (0 <= valY && valY <= 120)   { 
        digitalWrite(D1,LOW);
        digitalWrite(D2,HIGH);

        pwm2 = map(valY,120,0,0,70);

        analogWrite(P1,pwm2);
        analogWrite(P2,pwm2);
    }
    if (135 <= valY && valY <= 255 ) {
        digitalWrite(D1,HIGH);
        digitalWrite(D2,LOW);

        pwm2 = map(valY,135,255,0,70);

        analogWrite(P1,pwm2);
        analogWrite(P2,pwm2);
    }

    if ((121 <= valX && valX <= 134 ) && (121 <= valY && valY <= 134 )) {
      analogWrite(P1,0);
      analogWrite(P2,0);
    }

    delay(10);
  }  
}

lo sketch attende un comando di tipo seriale dal trasmettitore e controlla i motori per spostare il Robot Beginner Radio ricevitore nella direzione impartita dal telecomando.

Il sensore serve al robot per evitare gli ostacoli per cui farai in modo che in presenza di un ostacolo a distanza inferiore di quella definita alla linea 17 il robot non accetti comandi per procedere oltre nella direzione “avanti” ma solo i comandi per andare indietro o girare.

Le linee dello sketch sono:

linee 11-14: definisci i pin di controllo di direzione e potenza della motor shield;

linee 16-17: definisci il pin a cui hai collegato il cavo giallo del sensore, nel mio esempio A5;

linee 19-20: imposta a 0 la potenza iniziale dei motori;

linea 24: imposta la comunicazione seriale a 57600 baud, come hai fatto per il trasmettitore;

linee 26-31: definisci la modalità di utilizzo di ciascun pin definito nelle linee 11-16;

linee 33-37: imposta a LOW i pin di direzione dei motori e la rispettiva potenza a 0;

linea 42: leggi la distanza degli ostacoli dal sensore SHARP con il comando analogRead();

linea 44: testa la comunicazione seriale in modo che il buffer seriale contenga almeno due valori, il primo sarà il valore dell’asse X ed il secondo dell’asse Y

linee 46-47: imposta i valori per le variabili valX e valY rispettivamente ai valori letti nel buffer seriale;

linea 49: verifica il valore letto dalla variabile valX e se il suo valore è compreso tra 0 e 120 vuol dire che stai ricevendo dal trasmettitore il comando di procedere indietro

linee 50-51: siccome vuoi procedere indietro porterai entrambi i pin di direzione a LOW;

linea 53: rimappa i valori del range 120-0 sul range 0-100 con l’uso del comando map();

linee 55-56: imponi a entrambi i motori la potenza da erogare come calcolata alla linea precedente;

linee 58-66: sono simili alle linee precedenti se non per l’impostazione della direzione dei motori entrambi ad HIGH e per il controllo alle linee 62-63 in cui testi che la distanza misurata dal sensore sharp sia maggiore di quella impostata alla linea 17, in tal caso imposti la potenza da erogare ai motori a 0 per evitare che il Robot Beginner Radio ricevitore urti contro l’ostacolo rilevato;

linee 68-76: applica gli stessi concetti visti alle linee 49-57 all’asse Y del joystick, nota che la direzione dei motori è impostata in modo differente tra i due motori in modo da consentire al Robot Beginner Radio ricevitore di girare;

linee 77-85: sono identiche alle precedenti ( 68-76 ) a meno della direzione dei motori che viene invertita.

linea 87: è un ulteriore controllo che consente al Robot Beginner Radio ricevitore di rimanere fermo quando il joystick è al centro, testi infatti che i valori di valX e valY siano compresi tra 121 e 134;

linee 88-89: imposta i valori di potenza di entrambi i motori a 0;

linea 92: aggiungi un delay di 10 millisecondi in modo da consentire al driver di eseguire il comando impartito prima di ricevere il comando successivo.

Nel prossimo articolo ti mostrerò un video del Robot Beginner Radio ricevitore in funzione.

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/robot-beginner-radio-ricevitore-xbee.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.